CoreDataBooksはどうやってDocumentsディレクトリにCoreDataBooks.sqliteをコピーしているのかなーと「プロジェクト情報」を見たりなんなりで30分。結局ソースコードでコピーしている事が判明。最初に気づけと。
以下、手順です。
適当なプロジェクト、適当なデフォルトデータを作成する
ここでは、「Navigation-based Application」テンプレート、「Use Core Data for storage」付きでプロジェクトを作成。
アプリケーション起動後、+ボタンを連打し適当なデータを作成しました。
デフォルトデータをプロジェクトに追加する
さっき作った適当データは
/Users/ユーザ名/Library/Application Support/iPhone Simulator/バージョン/Applications/アプリ/Documents
あたりにあるので、それをXcodeのResourceグループあたりに放り込んでやります。
これでアプリケーションバンドルにデータが含まれるようになります。
データをコピーするようにコードを修正
AppDelegateのpersistentStoreCoordinator()というメソッドの中でデータをロードしているはずです。
そこを書き換えます。
変更前。
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"CoreDataTest.sqlite"]];
変更後。
NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"CoreDataTest.sqlite"]; NSFileManager *fileManager = [NSFileManager defaultManager]; // データがなければデフォルトデータをコピーする if (![fileManager fileExistsAtPath:storePath]) { NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"CoreDataTest" ofType:@"sqlite"]; if (defaultStorePath) { [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL]; } } NSURL *storeUrl = [NSURL fileURLWithPath:storePath];
これでデフォルトデータを提供できるようになりました。
0 件のコメント:
コメントを投稿