ちゃんと読んでないけど実現可能?メモ。
2010年6月25日金曜日
Core Data の migration
Core Dataのモデルを変更したときの対処方法です。以下のページ通りやればできるのではということでメモ。
ちなみに、.xcdatamodeldファイルは以下の方法で作成できます。
ちなみに、.xcdatamodeldファイルは以下の方法で作成できます。
- .xcdatamodelを選択
- メニュー「設計」→「データモデル」→「モデルバージョンを追加」を選択
2010年6月12日土曜日
Core Data デフォルトのデータを用意する
サンプルCoreDataBooksは初期起動時にいくつかの本の情報が入っています。あんな感じで、デフォルトのデータを提供したいのです。
CoreDataBooksはどうやってDocumentsディレクトリにCoreDataBooks.sqliteをコピーしているのかなーと「プロジェクト情報」を見たりなんなりで30分。結局ソースコードでコピーしている事が判明。最初に気づけと。
以下、手順です。
ここでは、「Navigation-based Application」テンプレート、「Use Core Data for storage」付きでプロジェクトを作成。
アプリケーション起動後、+ボタンを連打し適当なデータを作成しました。
さっき作った適当データは
あたりにあるので、それをXcodeのResourceグループあたりに放り込んでやります。
これでアプリケーションバンドルにデータが含まれるようになります。
AppDelegateのpersistentStoreCoordinator()というメソッドの中でデータをロードしているはずです。
そこを書き換えます。
変更前。
変更後。
これでデフォルトデータを提供できるようになりました。
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];
これでデフォルトデータを提供できるようになりました。
登録:
投稿 (Atom)
