Objective-C NSString: странные символы при регистрации - PullRequest
0 голосов
/ 05 августа 2009

Привет всем, я абсолютный нуб, когда дело доходит до разработки Objective-C / iPhone.

Я пытаюсь получить текст из базы данных SQLite. У меня есть цикл while, который выглядит так:

while(sqlite3_step(selectstmt) == SQLITE_ROW) {

И в этом цикле, это печатает в журнал просто отлично:

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

Это не работает:

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

Когда я запускаю вышеизложенное и смотрю журналы, я вижу:

cat name: ‡}00å

Я пытался записать поле на ярлык, думая, что это может быть что-то специфическое для NSLog, но там ничего не появляется. Очевидно, я упускаю что-то фундаментальное, но я в растерянности, что это такое.

1 Ответ

12 голосов
/ 05 августа 2009

Запишите вашу строку с %@ вместо %s, и все будет в порядке. NSString s - это не указатели на символы, это полноценные объекты, поэтому вам необходимо использовать заполнитель «object» в строке формата журнала.

Это дает дополнительное преимущество правильной работы со строками, не относящимися к ASCII, и всеми другими важными вещами, которые NSString дает вам.

Обратите внимание, что если вы только что зарегистрировали результат из SQLite напрямую, а не создали NSString с ним, тогда ваш %s был бы правильным.

Помните: %s для строк C, %@ для объектов Objective-C.

...