【发布时间】:2011-12-14 14:59:47
【问题描述】:
我正在将 SQLite3 数据库中的结果列表提取到 UITableView 中。我从数据库中提取文本的代码是这样的:
char *menuNameChars = (char *) sqlite3_column_text(statement, 1);
NSString *menuName = [[NSString alloc] initWithUTF8String:menuNameChars];
NSLog(@"Retrieved %s,%@ from DB.", menuNameChars, menuName);
当我使用initWithUTF8String 时,有时会从数据库中正确复制信息。但有时,来自char* 的信息会正确显示,但来自NSString 的信息不会:
2011-10-24 22:26:54.325 [23974:207] Retrieved Cravin Chicken Sandwich – Crispy, (null) from DB.
2011-10-24 22:26:54.327 [23974:207] Retrieved Cravin Chicken Sandwich – Roast, (null) from DB.
2011-10-24 22:26:54.331 [23974:207] Retrieved Jr Chicken Sandwich, Jr Chicken Sandwich from DB.
2011-10-24 22:26:54.337 [23974:207] Retrieved Prime-Cut Chicken Tenders - 3 Piece, Prime-Cut Chicken Tenders - 3 Piece from DB.
现在,如果我将 initWithUTF8String 替换为 initWithCString,则代码可以完美运行。但是,XCode 4.2 告诉我 initWithCString 已被弃用。我知道的足够了解我不想使用已弃用的代码,但如果 initWithUTF8String 不起作用,我应该使用什么?
【问题讨论】:
-
你试过
[NSString stringWithFormat:@"%s", menuNameChars]吗? -
为什么不使用像 FMDB github.com/ccgus/fmdb 这样的 sqlite 包装器?
-
@Dani 那么为什么不使用 Core Data 呢?更容易。
-
@WTP: 可能他已经有一个mysql数据库了?
-
@DanielRHicks:我还没有尝试过,但是如果 stringWithFormat 与 NSLog 一样,那肯定是一个解决方案! @Dani/@WTP:我实际上打算在这个程序中使用 FMDB 包装器,但是当我尝试添加 FMDB 代码时,它导致了一些 EXC_BAD_ACCESS 错误,所以我暂时将 FMDB 放在了次要位置。至于 Core Data,我还没有学会如何使用 Core Data(还)。不过它在待办事项列表上!
标签: objective-c ios nsstring char