2010-07-24 2 views
13

Я использую этот код для чтения данных из базы данных SQLite:iPhone stringWithCString осуждается

keyFromSql = [NSString stringWithCString:(char *)sqlite3_column_text(preparedStatement, 1)]; 

но компилятор дает мне предупреждение написал в названии ... так, что является правильным и не рекомендуется метод получить значение из sqlite?

спасибо!

ответ

26
+(id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc 

Я думаю, что вы обычно будете использовать NSUTF8StringEncoding, так что ваш код будет выглядеть

keyFromSq1 = [NSString stringWithCString:(char *)sqlite3_column_text(preparedStatement, 1) encoding:NSUTF8StringEncoding]; 

В качестве альтернативы вы можете использовать

keyFromSq1 = [NSString stringWithUTF8String:(char *)sqlite3_column_text(preparedStatement, 1)]; 
+0

'[[NSString alloc] initWithBytes: длина байт: кодировка счетчика: NSUTF8StringEncoding]' лучше, если внимательно подумать о документе Apple на странице https://developer.apple.com/reference/foundation/nsstring/1497290-stringwithcstring ? язык = ObjC –

5

Поскольку SQLite всегда возвращает кодированные строки UTF-8 *, you could just use +stringWithUTF8String:.

const char* res = (const char*)sqlite3_column_text(preparedStatement, 1); 
keyFromSql = [NSString stringWithUTF8String:res]; 

(* или UTF-16, если вы используете sqlite3_column_text16)

1

[[NSString alloc] initWithBytes:bytes length:count encoding:NSUTF8StringEncoding] предпочтительно stringWithCString:encoding: рекомендации

Apple's Document «s не очень хорошо, потому что оригинальный метод„не коротка, чтобы не останавливаться на символ NULL.“

Смежные вопросы