(a) バンドルに db を含めるようにしてください ( 「バンドル リソースのコピー」が見つかる画面のスナップショットについては、こちらを参照してください)。(b) db をバンドルからドキュメントにプログラムでコピーします。そこから開くことができます。
デバイスではなくシミュレータで動作する理由は少し興味深いです。アプリの Documents フォルダーをプログラムで取得するのではなく、固定パスから読み取っているとしか想像できませんか?
アップデート:
さまざまなリターン コードをチェックして、問題がないことを確認することをお勧めします。
コード サンプルを取得し、(a) の作成結果を確認しましたFMDatabase
。(b) のチェック結果open
。(c) FMResultSet
sqlite エラーメッセージの表示を含め、 の結果をチェックしました。(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 ~/Library
Terminal
sqlite3
よくある間違いは、プログラムでデータベースを適切にコピーopen
しないことです。そのため、メソッドは空のデータベースを作成executeQuery
し、テーブルが見つからないと言って失敗します。
あなたが見つけたものを教えてください。