3

次の形式でデータを保存しています

             05/03/2012 10:11PM : <0818aaaa aaaaaaaa aaaa454d 554c4154 4f520000 00000000 0000>

しかし、データを取得するときは、次のメソッドを使用して取得します

    sqlite3 *database;

if(sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {

    // Setup the SQL Statement and compile it for faster access
    const char *sqlStatement = "select logText from logTable";

    sqlite3_stmt *compiledStatement;


    if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {



        while(sqlite3_step(compiledStatement) == SQLITE_ROW) {              

            NSString *addressField = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(compiledStatement, 0)];

            // Read the data from the result row

            fullLog=[NSString stringWithFormat:@"%@%@",fullLog,addressField];

        } // end of the while

    }
    sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);

次のエラーが表示されます。

    Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSPlaceholderString initWithUTF8String:]: NULL cString'

*最初のスロー時のコール スタック:

この問題が発生している理由を教えてください

4

2 に答える 2

4

NSStringポインタでオブジェクトを初期化することはできないNULLので、その条件を確認してください。

const char* addressField_tmp = (const char*)sqlite3_column_text(compiledStatement, 0);

NSString *addressField = addressField_tmp == NULL ? nil : [[NSString alloc]           initWithUTF8String:addressField_tmp];
于 2012-10-31T04:25:32.917 に答える
0

コードの代わりに、次のコードで修正してください。

  NSString *addressField = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
于 2012-05-03T18:34:39.257 に答える