2010-11-03 100 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)。这只会在代码维护期间导致混淆。