【问题标题】:Inserting data after a Core Data migration在 Core Data 迁移后插入数据
【发布时间】:2010-11-03 17:46:24
【问题描述】:

我有一个引入 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?

【问题讨论】:

  • 插入是否有效?您是否明确调用 save ?还是依赖迁移管理器这样做?
  • 插入有效。我没有打电话保存。退出后可以看到数据库中的行。

标签: objective-c cocoa macos core-data


【解决方案1】:

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

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

同样,您也不应该在该方法中将其声明为Theme-insertNewObjectForEntityForName: inManagedObjectContext: 调用实际上返回的是普通的NSManagedObject)。只会在代码维护过程中造成混乱。

【讨论】:

    猜你喜欢
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多