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 は文字へのポインターではなく、本格的なオブジェクトであるため、ログ形式文字列で「オブジェクト」プレースホルダーを使用する必要があります。

これには、ASCII 以外の文字列や他のすべての重要なことを正しく処理できるという利点がありNSStringます。

を作成する代わりに、SQLite から直接結果をログに記録した場合は、正しいことに注意してNSStringください。%s

注意:%sは C 文字列%@用、 は Objective-C オブジェクト用です。

于 2009-08-05T04:57:32.700 に答える