在Core Data迁移后插入数据

时间:2010-11-03 17:46:25

标签: objective-c cocoa macos core-data

我有一个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;
}
  1. 这是一个好方法吗?
  2. 为什么不会调用Theme的-awakeFromInsert?

1 个答案:

答案 0 :(得分:3)

是的,这是一个很好的方法;可能是目前最好的方法。

主题的-awakeFromInsert未被调用,因为在迁移期间未使用自定义子类。迁移管理器使用裸NSManagedObject执行所有迁移操作,而不是使用任何自定义对象。

同样,您不应将其声明为Theme-insertNewObjectForEntityForName: inManagedObjectContext:调用真正返回该方法的NSManagedObject)。它只会在代码维护期间导致混淆。