在 Core Data 迁移后插入数据

Posted

技术标签:

【中文标题】在 Core Data 迁移后插入数据【英文标题】:Inserting data after a Core Data migration 【发布时间】: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;

    这是个好方法吗? 为什么不调用 Theme 的 -awakeFromInsert?

【问题讨论】:

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

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

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

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

【讨论】:

以上是关于在 Core Data 迁移后插入数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 Core Data 在 Swift 中通过 UIProgressView 异步插入数据

Swift 中大量 Core Data 批量插入的内存泄漏

将 JSON 数据插入 Core Data 存储需要很长时间

IOS - 如何在 Core Data Swift 中将数据插入到具有关系的不同表中

Core Data迁移后如何保持数据有序?

为啥 Core Data 插入需要越来越长的时间?