0

テーブルに 12 列あります。最後の 2 つの列が新しく追加されます。私はsqlite3データベースを使用しています。最後に作成した 2 つの新しい列以外の列に where 句を使用すると、データベースが作成され、クエリが正しく実行されます。最後の 2 つの列は NULL 文字列を返します。これにより、キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリが終了し、アプリがクラッシュします。理由: '* +[NSString stringWithUTF8String:]: NULL cString' * *

クエリが SQL Manager で実行されると、最後の 2 つの列を取得できました。準備ステートメントのどこかが間違っていると思います。

    NSString *query = @"select * from tableName where lastColumn = 'Value'";
    const char *sqlStatement = [query UTF8String];
sqlite3_stmt *compiledStatement;
    NSLog(@"could not prepare statement: %s\n", sqlite3_errmsg(database));

if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
// Loop through the results and add them to the feeds array
while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
    }

これについて私を助けてください。最後の2つの列がどこに行ったのかまったくわかりません.. :)

4

1 に答える 1

0

stringWithUTF8String: メソッドに NULL を渡していますが、これは許可されていません。NSString オブジェクトをインスタンス化する前に、sqlite から取得した値を確認する必要があります。

const char *ctext = sqlite3_column_text(compiledStatement, 2);
if (ctext) {
    text = [NSString stringWithUTF8String:ctext];
}

新しい列を追加したとき、既存のすべての行のこの列の値は NULL に設定されました。

于 2012-06-15T19:53:38.273 に答える