あなたはおそらく(Chの。5)マーカスZarraのコアデータブックのコピーを取得し、移行上に読んでください。しかし、それに失敗すると、知っておくべきいくつかの基本があります。まず、更新されたアプリに古いモデル(スキーマ)と新しいモデルの両方が必要です。次に、新しいモデルが「現在のモデル」としてタグ付けされていることを確認する必要があります。第3に、NSPersistentStoreCoordinatorを、既存のモデル(ディスクからロードされたもの)から新しいモデルに自動的にマッピングするように作成する必要があります。あなたの新しいアプリで
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (persistentStoreCoordinator)
return persistentStoreCoordinator;
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"MyDataStore.sqlite"]];
NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
// Use mapping model
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, nil];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeUrl
options:options
error:&error])
{
[NSApp presentError:error];
}
return persistentStoreCoordinator;
}
更新 あなたの古いモデルでは、正確古いアプリでモデルと同じである必要があります。このようなことがわからない場合は、確認するために実行できる手順がいくつかあります。私がやっているやり方は少し関係していますが、それが役に立つと思ったら、私はそれを概説します。
だから私はエンティティに追加したフィールドは、全く新しいエンティティである必要がありますか?それから、起動時にアップグレードをチェックして、古いスキーマから新しいスキーマに移行することができますか? –
あなたはおそらくこれを読んでてきましたが、そうでないかもしれないを選択します。モデルをまったく変更しない場合は、新しいバージョンを作成してください。新しい属性を追加するだけであれば、既存の属性をオプションに/から変更することができます。軽量な移行は自由に行う必要があります。私は、あなたが「まったく新しいエンティティ」とは何を意味するのか分かりません。 –
westsider
私は軽量です。 –