シミュレータと実際のiOSハードウェアはまったく同じではないことがわかりましたが、私はこの問題を解決し始めています。私はこのコードを持っています:iOSでのsqlite3のカウント(特にiPhone/iPadで)
sqlite3 *database;
sqlite3_stmt *statement;
int themeCount;
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
{
NSString *updateSQL = [NSString stringWithFormat: @"SELECT COUNT(*) FROM Theme"];
const char *update_stmt = [updateSQL UTF8String];
if(sqlite3_prepare_v2(database, update_stmt, -1, &statement, NULL) == SQLITE_OK){
if(sqlite3_step(statement)==SQLITE_ROW)
{
themeCount = sqlite3_column_int(statement, 0);
}
}
sqlite3_finalize(statement);
sqlite3_close(database);
}
シミュレータでは、それは完璧に動作します。一度デバイスにプッシュすると失敗します。私はそれを分解し、それが失敗し、戻りコードを思い付いてきた:私は、コードをキャプチャするために、その行を変更した場合
がif(sqlite3_prepare_v2(database, update_stmt, -1, &statement, NULL) == SQLITE_OK)
(。つまり、int型のx = sqlite3_prepare_v2(...))は、0を返します。シミュレータ、1をデバイスとともに使用します。私はここで何が間違っているのですか?!?!
また、記録のために、テーマテーブル用のCREATE文は次のとおりです。
@"CREATE TABLE Theme (ThemeId INTEGER PRIMARY KEY, ThemeName TEXT, Available BIT);"
(私の最初の考えは、それは大文字と小文字を区別したということです)
データベースは存在しますが、これは私が開くことを期待しているデータベースです。アプリケーションの実行開始時にブレークポイントをドロップすると(データベースへの更新など)、データベースは特定の場所(/ var/mobile/Applications/{GUID}/Documents/dbname})問題のメソッド(上記)は、同じパスを持ち、あなたの答え(あなたの答え)のように見えるようにコードを変更したときに、 "通過"する(つまりSQLITE_OK)。それはまだ内部に入り、prepare_v2を実行し、任意の行(つまり同じ結果)をスキップします。これは本当にイライラです! – SlackerCoder
OK、あなたは間違いなく(少なくとも部分的に)正しいです。明らかに、シミュレータでは、databasename.sqliteとDatabaseName.sqliteの間に違いはありませんが、iPhoneでは非常に異なっています。したがって、同じ名前でしたが、ACTUALファイルが見つかりませんでした。 100万人私に正しい方向を向けると、これを解決する手助けをしてくれてありがとう! – SlackerCoder