0

大家好,在 Objective-C / iPhone 开发方面,我完全是个菜鸟。

我正在尝试从 SQLite DB 中提取文本。我有一个看起来像这样的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 特有的,但那里什么也没有。显然我错过了一些基本的东西,但我不知道它是什么。

4

1 回答 1

12

%@用而不是记录你的字符串,%s你会没事的。NSStrings 不是指向字符的指针,它们是成熟的对象,因此您需要在日志格式字符串中使用“object”占位符。

这具有使用非 ASCII 字符串和所有其他重要的东西NSString给你做正确的事情的额外优势。

请注意,如果您只是直接从 SQLite 记录结果而不是NSString使用它创建一个,那么您的%s结果是正确的。

记住:%s是针对 C 字符串的,%@是针对 Objective-C 对象的。

于 2009-08-05T04:57:32.700 回答