奇妙な問題に遭遇しました。「pharmacies.sqlite3」というテスト データベースを iPhone プロジェクトに追加しました。そのファイルを iPhone プロジェクトの SUPPORTING FILES フォルダーにコピーしました。
しかし、カスタム db ファイルを iPhone のドキュメント フォルダにコピーしたにもかかわらず、探しているテーブルが存在しないというメッセージが表示されます。それが利用可能であっても。コードを少しリファクタリングしました。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// FMDB
self.databaseName = [[NSString alloc] initWithString:@"pharmacies.sqlite3"];
NSString *documentsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
self.databasePath = [documentsDir stringByAppendingPathComponent:self.databaseName];
[self createAndCheckDatabase];
[self getPharmacies];
}
そして、ここに私のヘルパーメソッドがあります:
- (void)createAndCheckDatabase
{
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
success = [fileManager fileExistsAtPath:self.databasePath];
if (success) {
return;
}
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:self.databaseName];
[fileManager copyItemAtPath:databasePathFromApp toPath:self.databasePath error:nil];
}
- (void)getPharmacies
{
FMDatabase *db = [FMDatabase databaseWithPath:self.databasePath];
[db setLogsErrors:YES];
[db setTraceExecution:YES];
[db open];
FMResultSet *results = [db executeQuery:@"SELECT * FROM pharmacies"];
while ([results next]) {
NSString *name = [results stringForColumn:@"name"];
NSLog(@"Apotheke: %@", name);
}
[db close];
}
しかし、まだテーブルがまったく見つかりません..何か見逃しましたか? コピーが機能しなかったというエラー メッセージはありません。