0

値のコレクションをさまざまなタイプの列を持つテーブルに格納しています。iPhone シミュレーターでアプリを実行すると、挿入と選択が正常に機能します。ただし、実際のデバイスで実行してデータを選択すると、テーブルのテキスト列の一部を取得できないように見えます (残りの列は正しく取得されているようです)。文字列を含むダイアログを表示する必要がある場合は、そうではありません。空のダイアログが表示されますが、文字列を含むダイアログはシミュレーターに正しく表示されました。

これは、挿入のコード スニペットです。

if(sqlite3_prepare_v2(database, sqlStatement,
                          -1, &compiledStatement, NULL) == SQLITE_OK)
    {
        sqlite3_bind_int(compiledStatement, 1, userData.ID);
        sqlite3_bind_double(compiledStatement, 2, userData.Location.Lat);
        sqlite3_bind_double(compiledStatement, 3, userData.Location.Lon);
        sqlite3_bind_text(compiledStatement, 4, [userData.Name UTF8String], -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(compiledStatement, 5, [userData.Surname UTF8String], -1, SQLITE_TRANSIENT);
    }

    if(sqlite3_step(compiledStatement) == SQLITE_DONE) {
        sqlite3_finalize(compiledStatement);
    }
    else {
        NSLog(@"%d",sqlite3_step(compiledStatement));
    }
}
sqlite3_close(database);

そして、これは選択です:

if (sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
        while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
            UserData *userData = [[UserData alloc] init];

            userData.ID = sqlite3_column_int(compiledStatement, 0);

            char *name = sqlite3_column_text(compiledStatement, 1);
            if (name == nil)
                userData.Name = @"";
            else
                userData.Name = [NSString stringWithUTF8String: name];

            [list addObject:userData];
        }
    }
    sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);

データベースのデータ管理がシミュレーターでうまく動作する理由はまったくわかりません (SQLite Manager プラグインがあり、データが正しく保存および取得されます) が、実際の iPhone ではそうではありません。デバイスで何が起こっているかを確認するにはどうすればよいですか? 誰かがこれに似たようなことを経験しましたか?

ありがとう!

4

2 に答える 2

0

if nil問題は空のレコードが原因である可能性があり、あなたの助けにはならないと思います。代わりに試してくださいNULL

if ((char *)sqlite3_column_text(compiledStatement, 1) == NULL)
 userData.Name = @"";
于 2012-11-14T12:28:10.423 に答える
0

あなたのすべてのアドバイスに従って、私は最終的にそれを機能させました。最終的に問題を解決したのは、大文字と小文字を区別することだったと思います。皆さんのおかげです

于 2012-11-17T10:07:26.140 に答える