2010-07-24 43 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:bytes length:count encoding:NSUTF8StringEncoding]'更好,如果您仔细考虑Apple的文档,请访问https://developer.apple.com/reference/foundation/nsstring/1497290-stringwithcstring ?语言= objc – 2016-08-25 11:45:54

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的建议是不是很确定,因为原来的方法‘不以NULL字符短停下来。’