#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» ;