2009-08-05 28 views
0

Hey alle, ich bin ein totaler Anfänger, wenn es um Objective-C/iPhone Entwicklung geht.Objective-C NSString: seltsame Zeichen beim Loggen

Ich versuche, Text von einer SQLite DB einzuziehen. Ich habe eine while-Schleife, die wie folgt aussieht:

while(sqlite3_step(selectstmt) == SQLITE_ROW) { 

Und innerhalb dieser Schleife, diese Drucke in das Protokoll gerade fein:

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

Das funktioniert nicht:

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

Wenn Ich laufe das oben und schaue auf die Protokolle, die ich sehe:

cat name: ‡}00å 

Ich habe versucht, das Feld auf ein Etikett zu schreiben, weil ich dachte, es könnte etwas Spezifisches für den NSLog sein, aber da oben ist nichts zu sehen. Natürlich fehlt mir etwas Grundlegendes, aber ich weiß nicht, was es ist.

Antwort

12

Loggen Sie Ihre Zeichenfolge mit %@ statt %s und alles wird gut. NSString s sind keine Zeiger auf Zeichen, sie sind vollwertige Objekte, daher müssen Sie den Platzhalter "object" in der Protokollformat-Zeichenfolge verwenden.

Dies hat den zusätzlichen Vorteil, das Richtige mit Nicht-ASCII-Zeichenfolgen und all den anderen wichtigen Dingen zu tun, die Ihnen NSString bietet.

Beachten Sie, dass, wenn Sie gerade das Ergebnis von SQLite direkt protokolliert hätten, anstatt eine NSString damit zu erstellen, dann wäre Ihre %s korrekt gewesen.

Nicht vergessen: %s ist für C-Strings, %@ ist für Objective-C-Objekte.