2010-03-12 2 views
0

Je suis coincé avec l'erreur sur la description de lecture. Quelque chose a dû mal tourner, mais je ne suis pas très sûr de savoir comment le résoudre. C'est mon code, en fait je n'ai pas vraiment d'idée sur ce qui se passe réellement dans ce code.chargement de dossier dans detailview

- (void) hydrateDetailViewData { 
//if detail view is hydrated then do not get it from database 
if(isDetailViewHydrated) return; 

if(detailStmt == nil) { 
    const char *sql = "select snapTitle, snapDesc from Snap where snapID =?"; 
    if(sqlite3_prepare_v2(database, sql, -1, &detailStmt, NULL) != SQLITE_OK) 
     NSAssert1(0, @"Error while creating detail view statement. '%s'", sqlite3_errmsg(database)); 
    NSLog(@"SQLite= %d", sqlite3_step(detailStmt)); 

} 


if(SQLITE_DONE != sqlite3_step(detailStmt)) { 


// NSString *descStr = [[NSString alloc] 
          //initWithString:sqlite3_column_text(detailStmt, 2)]; 
    NSString *descStr = [NSString stringWithUTF8String:(char *)sqlite3_column_text(detailStmt,2)]; 
self.snapDescription = descStr; 

[descStr release]; 
} 
else 
    NSAssert1(0, @"Error getting description of snap2play. '%s'", sqlite3_errmsg(database)); 

    sqlite3_reset(detailStmt); 

    isDetailViewHydrated = YES; //if hydrated, make sure do not get from database again. 
} 
} 
Error message: 
2010-03-12 16:17:14.377 Snap2Play[51282:20b] SQLite= 101 
2010-03-12 16:17:14.378 Snap2Play[51282:20b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[NSString stringWithUTF8String:]: NULL cString' 

???

Répondre

0

Vous récupérez 2 colonnes dans votre requête sql, puis vous essayez d'obtenir des données à partir du 3ème (car les index de colonne sont basés sur zéro);

NSString *descStr = [NSString stringWithUTF8String: 
     (char *)sqlite3_column_text(detailStmt,2)]; // Should be (detailsStmt, 1)? 

Vérifiez également quelle valeur sqlite3_step retourne réellement. Je pense qu'il sera plus correct de comparer la valeur de retour avec SQLITE_ROW au lieu de SQLITE_DONE car vous devez vous assurer que vous traitez des données de ligne valides:

if(SQLITE_ROW == sqlite3_step(detailStmt)) { 
... 
+0

ne fonctionne pas ... – summer