Простое приложение, подобное странице входа в систему

#iphone #objective-c #sqlite

#iPhone #objective-c #sqlite

Вопрос:

Я новичок в создании приложений для iPhone, и я пытаюсь создать простую страницу — что-то вроде страницы входа в систему. У меня есть база данных SQLite, в которой есть имена пользователей и пароли. Мой графический интерфейс выглядит следующим образом: у меня есть два текстовых поля, имя пользователя и пароль, а также кнопка входа в систему.

Я нашел код для создания страницы входа в систему, но он не работает. Ознакомьтесь с приведенным ниже кодом, чтобы увидеть, не ошибаюсь ли я. Там написано «Слишком много аргументов для функции ‘isEqualToString:'»

 -(void)checkindatabase
{
    NSString *txtUsername = @"";
    NSString *txtPassword = @"";
    NSString *sqlStatement = @"";
    NSString *direct = [[NSString alloc]init] ;
    NSString *dbPath = [direct stringByAppendingPathComponent:@"journeymapper.db3"];


    if(sqlite3_open([dbPath UTF8String], amp;database) == SQLITE_OK)
    {

        sqlStatement = [[NSString alloc] initWithFormat:@"select Username='%@',Password='%@' from UserInformation",txtuser.text,txtpass.text];
        //[sql UTF8String];
            //NSLog(@"'%s'",[sql UTF8String]);
        sqlite3_stmt *statment;
        if(sqlite3_prepare_v2(database, [sqlStatement cStringUsingEncoding:NSUTF8StringEncoding], -1, amp;statment, NULL) == SQLITE_OK)
        {
             while (sqlite3_step(statment) == SQLITE_ROW)
             {
                 txtUsername = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(statment,1)] retain];
                 txtPassword = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(statment, 2)] retain];

             }


        }
                sqlite3_finalize(statment);
                sqlite3_close(database);
        if([txtUsername isEqualToString:@"%@",_Textuser]amp;amp;[txtPassword isEqualToString:@"%@",_Textpass])
            { 
                UIAlertView* alert = [[UIAlertView alloc] initWithTitle:nil message:@"You are  vaild user" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                [alert show];
                [alert release];
            }


    }

}

-(IBAction)login
{
    [self checkindatabase]; 
}
  

Ответ №1:

Вместо:

 [txtUsername isEqualToString:@"%@",_Textuser]
  

используйте:

 [txtUsername isEqualToString:_Textuser]
  

или:

 [txtUsername isEqualToString:[NSString stringWithFormat:@"%@",_Textuser]]
  

Как указано в ошибке, у вас слишком много (2) аргументов, в то время как метод -isEqualToString: ожидает только один.

Комментарии:

1. Я хочу проверить _Textuser и _TextPassword, как это можно сделать

2. Спасибо, это работает, но не показывает мне alter view. Даже я ввожу правильные имя пользователя и пароль. В чем проблема сейчас

3. Это не входит в условие. Это первая проверка.if(sqlite3_open([dbPath UTF8String], amp;database) == SQLITE_OK) затем он переходит к if(sqlite3_prepare_v2(datvabase, [SQLStatement cStringUsingEncoding:NSUTF8StringEncoding], -1, amp;statment, NULL) == SQLITE_OK) после этого возникает проблема, она не проверяет условие while (sqlite3_step ( statment) ==SQLITE_ROW)где{txtusernameamp;txtPassword} он напрямую переходит к sqlite3_finalize(statment); в чем была проблема, которую я не понял, дорогая.

Ответ №2:

вы передаете формат в isEqualToString:

вы можете сделать это так же, как вы можете сделать это как

 [txtUsername isEqualToString:[NSString stringWithFormat:@"%@",_Textuser]];
  

Комментарии:

1. saabnib благодарит, что это работает, но не показывает мне alter view. Даже я ввожу правильные имя пользователя и пароль. В чем проблема сейчас

2. просто NSLog записывает оба значения перед операцией if и проверяет, совпадают ли они с console.

3. Это не входит в то Состояние . Сначала проверяется if (sqlite3_open([dbPath UTF8String], amp;database) == SQLITE_OK), затем выполняется if(sqlite3_prepare_v2(datvabase, [SQLStatement cStringUsingEncoding:NSUTF8StringEncoding], -1, amp; statment, NULL) == SQLITE_OK) Но проблема здесь в том, что он проверяет условие while (sqlite3_step(statment) == SQLITE_ROW) где мое txtusername amp; txtPassword напрямую переходит к sqlite3_finalize(statment); в чем была проблема, дорогая, я не понял

4. это означает, что теперь строка в базе данных означает, что ваша база данных пуста

5. В моей базе данных есть один ввод, который имеет значение (имя пользователя «harish» и пароль «harish» ;