BAD_ACCESS при выборе SQLITE - PullRequest
0 голосов
/ 20 июня 2011

Я получаю EXC_BAD_ACCESS, когда пытаюсь что-либо сделать со значением, которое выбираю из локальной базы данных SQLITE при разработке для iPhone.Код для моей функции:

-(void) updateFromDB {

// Setup the database object
sqlite3 *database;

// Open DB
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {

    NSString *query = [NSString stringWithFormat:@"SELECT MOD_ID FROM MODULE;"];

    //NSLog(@"QUERY: %@",query);

    // Prepare statement
    sqlite3_stmt *statement;
    if(sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, NULL) == SQLITE_OK) {

        // Execute SQL
        while (sqlite3_step(statement) == SQLITE_ROW) {

            // Get MOD_IDs
            NSInteger MOD_ID = sqlite3_column_int(statement, 0);

            NSString *ID = [NSString stringWithFormat:@"%@",MOD_ID];

            //=======================
            // Get Notice Module Data
            //=======================
            if (MOD_ID == 1) {
                self.noticeModule = [[ModuleSetting alloc] initWithID:ID];
            }




        }

    } else {
        NSAssert1(0,@"Error: failed to prepare statement. '%s'", sqlite3_errmsg(database));
    }

    // Release the compiled statement from memory
    sqlite3_finalize(statement);

} else {
    sqlite3_close(database);
    NSAssert1(0,@"Failed to open database. '%s'",sqlite3_errmsg(database));
}
sqlite3_close(database);

}

Неправильный доступ происходит по линии

NSString *ID = [NSString stringWithFormat:@"%@",MOD_ID];

Спасибо за любую помощь, которую вы можете предложить!

Ответы [ 4 ]

1 голос
/ 20 июня 2011

Используйте ниже

 NSInteger MOD_ID = sqlite3_column_int(statement, 0);
   NSString *ID = [NSString stringWithFormat:@"%d",MOD_ID];
1 голос
/ 20 июня 2011

Вы не можете использовать %@ в строках формата для целых чисел, только для объектов Obj-C.Для целых чисел используйте %d (или для NSInteger, я думаю, что рекомендуется использовать %ld).

Ознакомьтесь с руководством Спецификаторы формата строки .

1 голос
/ 20 июня 2011

MOD_ID не указатель, поэтому% @ неверен.

1 голос
/ 20 июня 2011

%@ обозначает объекты.Но MOD_ID кажется integer.Таким образом, ваш формат должен быть %d,

NSString *ID = [NSString stringWithFormat:@"%d", MOD_ID];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...