コンテンツの更新も更新できるように、アプリの読み取り専用データベースをアプリ サポート ディレクトリに移動させています (アプリの更新ではなく、有線の更新を介して)。以下のコードはアプリ デリゲート内にあり、db をコピーしますが、最初の実行時に NSFileManager を次の試行 (その実行中) に実行して、そこにあるかどうかを確認するか、コピーされたファイルが読み込まれないようにします。ただし、アプリを閉じて再起動するとすべて正常に動作するため、コピーしています。私は途方に暮れています。
NSFileManager *fm = [[[NSFileManager alloc] init] autorelease];
NSError *err = nil;
NSURL *ASD = [fm URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:&err];
if (!err) {
NSURL* path = [NSURL URLWithString:DATABASE_NAME relativeToURL:ASD];
NSString *bundle = [[ NSBundle mainBundle] pathForResource:@"datafiles/data_main" ofType:@"sqlite"];
if ([fm fileExistsAtPath:[path path]]) {
if([DatabaseManager isBundledDBNewerThenInUse]){
NSLog(@"bundled db is newer");
[DatabaseManager close];
[fm removeItemAtURL:path error:&err];
if (err) {
NSLog(@"Error deleting old DB:%@",err);
}
else {
[fm copyItemAtPath:bundle toPath:[path path] error:&err];
if (err) {
NSLog(@"Error in copying over DB:%@",err);
}
else
{
NSLog(@"db should have been copied over correctly");
}
}
}
}
else{
[fm copyItemAtPath:bundle toPath:[path path] error:&err];
if (err) {
NSLog(@"Error in copying over DB:%@",err);
}
}
}
else
{
NSLog(@"Error in opening AS for DB copy:%@",err);
}
"[DatabaseManager isBundledDBNewerThenInUse]" は、App Support ディレクトリ内のデータベースが存在しないか、バンドル内のデータベースよりも古いバージョンである場合に YES を返します。App Supportディレクトリのdbを開くため、削除しようとする前に[DatabaseManagerを閉じる]。それがまったく役立つ場合、私は DatabaseManager で FMDB を使用しています。しかし、最初のロードの後に言ったように、アプリを強制終了してアプリに戻ると、完全に機能します。(バンドルからのデータベースの更新では、最初のロードでもデータベースは更新されません。) どんな助けも素晴らしいでしょう。さらに情報が必要な場合は、ただ尋ねてください! ありがとう!