1

繰り返しますが、誰かの助けが必要です。FMDB ラッパーを使用した SQLite 接続については、以下のチュートリアルに従っています。

http://www.icodeblog.com/2011/11/04/simple-sqlite-database-interaction-using-fmdb/

上記のチュートリアルでは、すべて (データベースとテーブルの作成、挿入、削除) がプログラムで行われますが、シミュレーターではすべて正常に動作しますが、SQLite Manager アドオンを使用してデータベース (iOS でプログラムで作成されたもの) に挿入すると、 、テスト デバイスに表示されません。私の側に欠けているもの (ファイルをバンドルにコピーするなど) はありますか? これは本当に私を夢中にさせています。私はこれらに完全に慣れていません..誰かがこれを手伝ってくれますか?

PS: Core Data を使用できることはわかっていますが、特定の理由により、このアプリでは SQLite を使用する必要があります。どんな助けでも大歓迎です。

前もって感謝します。

4

1 に答える 1

2

(a) バンドルに db を含めるようにしてください ( 「バンドル リソースのコピー」が見つかる画面のスナップショットについては、こちらを参照してください)。(b) db をバンドルからドキュメントにプログラムでコピーします。そこから開くことができます。

デバイスではなくシミュレータで動作する理由は少し興味深いです。アプリの Documents フォルダーをプログラムで取得するのではなく、固定パスから読み取っているとしか想像できませんか?

アップデート:

さまざまなリターン コードをチェックして、問題がないことを確認することをお勧めします。

コード サンプルを取得し、(a) の作成結果を確認しましたFMDatabase。(b) のチェック結果open。(c) FMResultSetsqlite エラーメッセージの表示を含め、 の結果をチェックしました。(d)結果セットを閉じました:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsPath = [paths objectAtIndex:0];
NSString *path = [docsPath stringByAppendingPathComponent:@"DADatabase.sqlite"];

FMDatabase *database = [FMDatabase databaseWithPath:path];
NSAssert(database, @"Unable to create FMDatabase object");

NSLog(@"%@", database);

BOOL success = [database open];
NSAssert(success, @"Unable to open database");

FMResultSet *results = [database executeQuery:@"SELECT * FROM DrugList"];
NSAssert(results, @"Unable to create result set: %@", [database lastErrorMessage]);

while([results next]) {
    NSString *name = [results stringForColumn:@"Drugname"];
    [arrayToLoadDiseases addObject:name];
}

[results close]; 

[database close];

これをシミュレーターで実行している場合は、シミュレーターのバンドルとドキュメント フォルダーを調べて、問題が解決しない場合は、すべてが正しい場所にあることを確認してください。シミュレーターのフォルダーは、「~/Library/Application Support/iPhone Simulator/5.1/Applications/」のようなものです (5.1 は、使用しているシミュレーターのバージョンに置き換えてください)。コマンド ライン ウィンドウでLibraryを実行して、フォルダーを再表示する必要がある場合があります。とにかく、Mac OS X のコマンドを使用してシミュレーターのデータベースを開き、テーブルが正常であることを確認できます。chflags nohidden ~/LibraryTerminalsqlite3

よくある間違いは、プログラムでデータベースを適切にコピーopenしないことです。そのため、メソッドは空のデータベースを作成executeQueryし、テーブルが見つからないと言って失敗します。

あなたが見つけたものを教えてください。

于 2012-07-31T20:51:52.350 に答える