NSString Objective-C: caratteri strani durante la registrazione
-
22-07-2019 - |
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 è.
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.