получение проблемы при получении данных из базы данных - PullRequest
0 голосов
/ 01 апреля 2011

Я пытаюсь проверить имя пользователя и пароль, введенные пользователем с базой данных 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

В чем может быть проблема

спасибо

Ответы [ 2 ]

1 голос
/ 01 апреля 2011

Во-первых, если он дает сбой, вам также необходимо опубликовать журнал сбоя здесь.

Второе - не используйте sqllite для хранения имени пользователя / пароля. Используйте брелок.

Третье - если вы хотите использовать sqllite для хранения чего-либо, почему бы не использовать CoreData?

О вашем предупреждении - похоже, вы забыли добавить свой метод readLoginFromDatabase в заголовочный файл.

0 голосов
/ 01 апреля 2011

Если вы хотите удалить предупреждение, добавьте этот код в свой JourneyAppDelegate.h

-(void)readLoginFromDatabase;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...