iPhone中的stringWithCString已经被弃用。

13

我使用这段代码从sqlite数据库中读取数据:

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

但编译器给我发出了标题中所写的警告...那么,从sqlite检索值的正确和未弃用的方法是什么?

谢谢!

3个回答

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)];

如果您仔细阅读https://developer.apple.com/reference/foundation/nsstring/1497290-stringwithcstring?language=objc中的Apple文档,则`[[NSString alloc] initWithBytes:bytes length:count encoding:NSUTF8StringEncoding]`更好。 - DawnSong

5

由于SQLite总是返回UTF-8*编码的字符串,您可以直接使用+stringWithUTF8String:方法。

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

(如果您使用sqlite3_column_text16),则为UTF-8或UTF-16。


1

[[NSString alloc] initWithBytes:bytes length:count encoding:NSUTF8StringEncoding]stringWithCString:encoding:更受推荐。

苹果文档的建议并不是很好,因为原始方法“不会在空字符处停止”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接