2011-06-20 2 views
0

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

-(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]; 

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

ответ

1

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

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

Это устранило проблему, спасибо за вашу помощь, ребята! – TimOz44

1

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

Посмотрите на руководство String Format Specifiers.

1

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

1

Использование ниже

NSInteger MOD_ID = sqlite3_column_int(statement, 0); 
    NSString *ID = [NSString stringWithFormat:@"%d",MOD_ID]; 
Смежные вопросы