Приложение вылетает при попытке загрузки из SQLite

Ну, я делаю обновление для приложения, которое я сделал, но у меня есть некоторые проблемы во время выполнения. Люди сказали, что хотят иметь возможность сохранять введенные данные, поэтому я внедряю базу данных SQLite. Я получил приложение, чтобы проверить, существует ли база данных, и создать все необходимое, если база данных или таблица базы данных не существует. Однако у меня возникают проблемы с получением данных из SQLite. Когда я нажимаю кнопку, которая должна загрузить данные, приложение вылетает. Я пытался использовать как NSLog, так и UIAlertView, чтобы выяснить, что происходит, но не могу получить результаты. Однако при выполнении тестового запуска в SQLite запрос, который я выдаю, правильный, поэтому должно быть что-то еще.

следующий код, который я использую для получения данных:

- (IBAction)loadData
{
    NSDateFormatter* bf = [[NSDateFormatter alloc] init];
    [bf setDateFormat:@"MM/dd/yyyy"];
    NSDate* sdate;
    NSString* birthDate;
    NSString* balance;
    NSString* dyear;

    sqlite3_stmt *stmt;

    // get document directory
    NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docsDir = [dirPaths objectAtIndex:0];

    // build path to database
    dbpath = [[NSString alloc] initWithString:[docsDir stringByAppendingPathComponent:@"mrd.db"]];

    const char *dpath = [dbpath UTF8String];

    if (sqlite3_open(dpath, &mrdDB) == SQLITE_OK) 
    {
        NSString* query = [NSString stringWithFormat:@"SELECT date(birth), bal, year FROM rmd LIMIT 1"];
        const char* query_statement = [query UTF8String];

        if (sqlite3_prepare_v2(mrdDB, query_statement, -1, &stmt, NULL) == SQLITE_OK) 
        {
            if (sqlite3_step(stmt) == SQLITE_ROW) 
            {
                birthDate = [[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(stmt, 1)];
                balance = [[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(stmt, 2)];
                dyear = [[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(stmt, 3)];

                sdate = [bf dateFromString:birthDate];

                self.birth.text = [bf stringFromDate:sdate];
                [birthDate release];
                [bf release];

                self.bal.text = balance;
                [balance release];

                self.year.text = dyear;
                [dyear release];

                self.status.text = @"data loaded sucessfully";

            } else {
                self.status.text = @"Cannot find/retrieve saved data";
            }
            sqlite3_finalize(stmt);
       }
       sqlite3_close(mrdDB);
    }
 }

Приложение может сохранять данные в базе данных, так как приложение отображает сообщение «сохранение успешно», которое я добавил для пользователя, а также для проверки правильности выполнения действий, поэтому я не слишком уверен, что происходит.


person user1013391    schedule 17.04.2012    source источник
comment
Сообщенная ошибка указывает на int retVal = UIApplicationMain(argc, argv, nil, nil); и ошибка - это сигнал, полученный программой: «SIGABRT» (здесь одинарная кавычка используется вместо двойных кавычек).   -  person user1013391    schedule 17.04.2012
comment
Посмотрите на свой стек, чтобы найти оскорбительную строку кода. Или так же просто установите точку останова отладки в этой подпрограмме, пройдитесь по ней и посмотрите, где у вас возникла проблема. Меня интересует, как вы извлекаете дату в виде строки, конвертируете ее в дату и обратно в строку. Я не удивлюсь, если sdate, например, будет равен нулю (потому что он соответствует вашей строке формата dateformatter). Я не знаю. Но один шаг через эту рутину, и ваша проблема выскочит на вас.   -  person Rob    schedule 18.04.2012
comment
Кстати, вы сказали, что видели сообщение об успешном сохранении (или, я думаю, сообщение о загрузке данных успешно [sic])? Это странно. Будет очень интересно, что скажет вам ваш пошаговый код...   -  person Rob    schedule 18.04.2012
comment
@RobertRyan Да, при просмотре базы данных и сохранении данных действительно ничего не было, ноль или нуль. Я нашел и исправил форматирование даты через некоторое время. Сообщение, отправленное моим приложением, было успешно сохранено, но из-за того, что база данных в симуляторе не согласовывалась с входными данными, я запускал тесты, пока все не получилось правильно.   -  person user1013391    schedule 19.04.2012


Ответы (1)


Я нашел свою проблему, найдя, где симулятор сохраняет базы данных. Моя проблема была не в загрузке данных, а в том, как они были сохранены. Спасибо за помощь.

person user1013391    schedule 19.04.2012