2012-06-08 16 views
5

Używam bazy danych sqlite dla aplikacji na iphone. ale jego awarię na linii "while while" podczas pobierania danych z bazy danych czasami.EXC_BAD_ACCESS w sqlite_step (instrukcja)

-(void)GetMethod 
{ 

    NSString *query = [[NSString alloc] initWithFormat:@"SELECT * FROM errorlogs"]; 
    sqlite3_stmt *statement;  
    if (sqlite3_prepare_v2(database, [query UTF8String],-1, &statement, nil) == SQLITE_OK) 
    { 
     while (sqlite3_step(statement) == SQLITE_ROW) **// EXC_BAD_ACCESS ON THIS LINE** 
     { 
      char *uid1 = (char *)sqlite3_column_text(statement, 0); 
      NSString *uid = [NSString stringWithFormat:@"%s",uid1]; 
     } 
    } 
    sqlite3_finalize(statement); 
} 

dlaczego otrzymuję EXC_BAD_ACCESS podczas pętli.

enter image description here Dzięki.

Odpowiedz

2

Albo sqlite3_step(statement) lub SQLITE_ROW nie jest zainicjowany lub został już wydany. Kiedy uruchamia kontrolę równości na nieistniejącym obiekcie, rzuca EXE_BAD_ACCESS.

Czy zwracasz jakieś wiersze?

+0

Dzięki za odpowiedź. Używam powyższego kodu wspomnianego w moim pytaniu. tak sqlite3_step (instrukcja) jest inicjowane, a sqlite_row jest stałą. I nie są jeszcze wydane. – iDilip

+0

Czy "SELECT * FROM errorlogs' zwraca wszystkie wiersze? Jeśli bloki błędów są puste, możesz porównywać z niczym, co spowoduje błąd. –

3

Spróbuj użyć platformy FMDB, bardzo mi pomógł w moim projekcie.
Oto link: https://github.com/ccgus/fmdb
Daj jej wygląd, jeśli można;)

+0

Czy to inna baza danych? jeśli tak, nie mogę przeprowadzić migracji z jednej bazy danych do innej dla tego błędu. – iDilip

+0

nie, to tylko opakowanie, które upraszcza kodowanie, to prawie wszystko. plus jego super łatwy w użyciu. Jedną rzeczą jest próba włączenia nszomów do śledzenia błędu, wystarczy nacisnąć alt + cmd + r, a jest jedno pole wyboru "Włącz obiekty zombie". –

+0

NSZombie jest włączone w moim projekcie. ale nadal rzuca EXC_BAD_ACCESS na tej linii. – iDilip