Domanda

Ciao a tutti, sono un vero noob quando si tratta di sviluppo di Objective-C / iPhone.

Sto cercando di estrarre il testo da un DB SQLite. Ho un ciclo while che assomiglia a questo:

while(sqlite3_step(selectstmt) == SQLITE_ROW) {

E all'interno di quel ciclo, questo stampa sul registro bene:

NSLog(@"Text: %s",sqlite3_column_text(selectstmt, 1));

Questo non funziona:

Category *categoryObj = [[Category alloc] initWithPrimaryKey:primaryKey];
categoryObj.categoryName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];
NSLog(@"cat name: %s",categoryObj.categoryName);

Quando eseguo quanto sopra e guardo i registri vedo:

cat name: ‡}00å

Ho provato a scrivere il campo su un'etichetta, pensando che potesse essere qualcosa di specifico per il NSLog, ma non compare nulla. Chiaramente mi manca qualcosa di fondamentale, ma sono perplesso per quello che è.

È stato utile?

Soluzione

Registra la tua stringa con % @ invece di % s e andrà tutto bene. I NSString non sono puntatori a personaggi, sono oggetti a tutti gli effetti, quindi devi usare l'oggetto " oggetto " segnaposto nella stringa del formato registro.

Questo ha l'ulteriore vantaggio di fare la cosa giusta con stringhe non ASCII e tutte le altre cose importanti che NSString ti dà.

Nota che se avessi appena registrato il risultato direttamente da SQLite invece di creare un NSString , il tuo % s sarebbe stato corretto.

Ricorda: % s è per stringhe C, % @ è per oggetti Objective-C.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top