在 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 异步插入数据
将 JSON 数据插入 Core Data 存储需要很长时间