2010-11-03 102 views
2

我有一個引入2個新實體類型的核心數據遷移。遷移沒有問題,但我想在遷移後用缺省數據填充數據庫。核心數據遷移後插入數據

目前,我的方法是定義一個定製NSEntityMigrationPolicy和覆蓋endEntityMapping:經理:錯誤:

- (BOOL)endEntityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error { 
if (![super endEntityMapping:mapping manager:manager error:error]) return NO; 
Theme *defaultTheme = [NSEntityDescription insertNewObjectForEntityForName:@"Theme" inManagedObjectContext:[manager destinationContext]]; 
[defaultTheme setName:NSLocalizedString(@"Default", @"Default theme name")]; 
return YES; 
} 
  1. 這是一個好辦法?
  2. 爲什麼Theme的-awakeFromInsert不會被調用?
+0

做了插入工作嗎?你是否明確地呼叫保存?還是依靠遷移管理器來做到這一點? – 2010-11-03 18:08:26

+0

插入作品。我不叫保存。退出後,我可以看到數據庫中的行。 – fraserhess 2010-11-04 02:03:46

回答

2

是的,這是一個很好的方法;可能是目前最好的方法。

主題的-awakeFromInsert未被調用,因爲您的自定義子類在遷移過程中未使用。遷移管理器執行所有遷移操作,而不使用任何自定義對象。

同樣,您不應該在該方法中聲明它爲Theme-insertNewObjectForEntityForName: inManagedObjectContext:調用實際上正在返回香草NSManagedObject)。這隻會在代碼維護期間導致混淆。