以前は、プリロードされたデータベースを使用してアプリケーションをリリースしました。そのため、ユーザーは最初の実行時にアプリケーションを更新する必要はありませんでした。私は(申し訳ありませんが、もうリンクを持っていない)私は私のアプリデリゲートのpersistentStoreCoordinator
メソッドに追加するように別の質問で見つかったいくつかのコードがありました:iOS 7でデータベースをあらかじめロードする
- (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でこれを実行しようと、Iエラーは発生しませんが、データベースは空です(私のmainBundle
のデータベースには私が期待しているすべての情報が含まれていますが)。 applicationDocumentsDirectory
にデータベースファイル(.sqlite-shmファイルと.sqlite-walファイル)がさらに存在することに気付きました。これらのファイルで何かする必要がありますか?それとも、アプリケーションにプリロードされたデータベースを持ち込むことができなくなっていますか?
EDIT:新しい.sqlite-shmファイルと.sqlite-walファイルをコピーするコードを追加しようとしましたが、それは役に立ちません。
うん、 'options'辞書はトリックを行うと付け加えました。あなたがリンクしたビデオをチェックしてみると、それは私が必要とするものではないと思う=)。そうでなければ、別の解決策を見つけなければならないだろうが、これは今のところうまくいくようだ。 – GeneralMike
WALはマルチスレッドアプリケーションでパフォーマンスが向上するため、ジャーナルモードの変更には注意が必要です。私は、WALを有効にして事前入力済みのデータベースを出荷する方法を正確にはわかりません。 –
@DavidCaunt:私はこの時点で私のアプリのパフォーマンスについてあまり心配していません。以前のバージョンのアプリケーションではデータベース操作がかなり遅かったですが、多くのテーブルを大幅に削減して無駄なスペースを無くし、フェッチを変更してセッションで必要となる情報をよりうまく得るようにしました。これらの変更の後、検出可能な遅延は事実上ありません。何かが変わってパフォーマンスが再び苦しみ始めると、WALをもう一度見ていくことに気をつけます - ありがとう。 – GeneralMike