過去に、プリロードされたデータベースを使用してアプリをリリースしたので、ユーザーは最初の実行時にデータベースを更新する必要がありませんでした。SOに関する別の質問で見つけたコードがいくつかありました(申し訳ありませんが、リンクはもうありません)。それをApp DelegateのpersistentStoreCoordinator
メソッドに追加しました:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"db.sqlite"];
if (![[NSFileManager defaultManager] fileExistsAtPath:[storeURL path]])
{
NSURL *preloadURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"db" ofType:@"sqlite"]];
NSError* err = nil;
if (![[NSFileManager defaultManager] copyItemAtURL:preloadURL toURL:storeURL error:&err])
{
NSLog (@"Error - Could not preload database.");
}
}
//... more code generated from the template here
}
iOS 7 でこれを実行しようとすると、エラーは発生しませんが、データベースは空です (私のデータベースにmainBundle
は期待している情報がすべて含まれています)。にさらにデータベース ファイル (.sqlite-shm ファイルと .sqlite-wal ファイル) があることに気付きましたapplicationDocumentsDirectory
。それらのファイルでも何かをする必要がありますか? それとも、プリロードされたデータベースをアプリに同梱することはできなくなりましたか?
編集:新しい .sqlite-shm および .sqlite-wal ファイルもコピーするコードを追加しようとしましたが、それは役に立ちません。