在Core Data迁移后插入数据

3
我有一个Core Data迁移,引入了2个新的实体类型。迁移没有问题,但我希望在迁移后向数据库填充默认数据。
目前,我的方法是定义一个自定义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不被调用?

插入操作成功了吗?你是显式调用保存方法还是依赖于迁移管理器来完成保存操作? - Jeff Schilling
插入操作成功。我没有调用保存函数,但是在退出后我可以在数据库中看到这一行数据。 - fraserhess
1个回答

3

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

主题的 -awakeFromInsert 没有被调用,因为在迁移过程中没有使用你的自定义子类。迁移管理器执行所有迁移操作时都是使用裸 NSManagedObject 而不是任何自定义对象。

同样,在该方法中也不应将其声明为一个 Theme-insertNewObjectForEntityForName: inManagedObjectContext: 调用实际上只返回一个普通的 NSManagedObject),这只会在代码维护期间导致混乱。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接