我有一个Core Data迁移,它引入了两个新的实体类型。迁移工作没有问题,但我希望在迁移后使用默认数据填充数据库。
目前,我的方法是定义自定义NSEntityMigrationPolicy并覆盖endEntityMapping:manager:error:
- (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;
}
答案 0 :(得分:3)
是的,这是一个很好的方法;可能是目前最好的方法。
主题的-awakeFromInsert
未被调用,因为在迁移期间未使用自定义子类。迁移管理器使用裸NSManagedObject执行所有迁移操作,而不是使用任何自定义对象。
同样,您不应将其声明为Theme
(-insertNewObjectForEntityForName: inManagedObjectContext:
调用真正返回该方法的NSManagedObject
)。它只会在代码维护期间导致混淆。