Я пытаюсь проверить имя пользователя и пароль, введенные пользователем с базой данных sqlite. Если имя пользователя и пароль присутствуют в базе данных, пользователю не нужно входить в систему. Но если его имя пользователя и пароль не совпадают, ему нужно авторизоваться. Сначала я добавил следующий код в мой appdelegate:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
databaseName =@"journeymapper.db3";
NSArray *documentsPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentsPaths objectAtIndex:0];
databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
[self checkAndCreateDatabase];
}
-(void)checkAndCreateDatabase{
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
success = [fileManager fileExistsAtPath:databasePath];
if (success)
return;
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath]stringByAppendingPathComponent:databaseName];
[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
[fileManager release];
}
-(void)readLoginFromDatabase{
sqlite3 *database;
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK){
const char *sqlStatement = "Select Username,Password from UserInformation";
sqlite3_stmt *compiledStatement;
if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK){
NSString *aUserName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
NSString *aPassword = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];
}
sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);
}
Изначально я проверил наличие базы данных. Если нет, то создал ее. Затем я прочитал из базы данных.
Затем в действие входа в систему моего контроллера входа я добавил следующий код:
-(IBAction)login:(id)sender{
journey = (JourneyAppDelegate *)[[UIApplication sharedApplication]delegate];
if ([mUserName.text isEqualToString:@"shardulprabhu"] && [mPassword.text isEqualToString:@"password"]) {
[journey readLoginFromDatabase];
NSLog(@"journey read");
}
else{
[self signUp];
}
}
этот код проверяет, совпадает ли myusername и пароль с указанной строкой в базе данных, и если она равна, она должна считываться из базы данных. Также она должна зарегистрироваться. Но когда я запускаю свое приложение, приложение загружается, и когда я ввожу имя пользователя и пароль нажмите кнопку входа, приложение вылетает.
у меня появляется предупреждение о входе в систему, что JourneyAppDelegate может не отвечать на readLoginFromDatabase
В чем может быть проблема
спасибо