【发布时间】:2017-08-01 16:40:35
【问题描述】:
我已经阅读了一些关于此的博客,但我仍然对如何使用 NSPersistentContainer performBackgroundTask 创建实体并保存它感到困惑。通过在performBackgroundTask() { (moc) in } 块中调用便捷方法init(context moc: NSManagedObjectContext) 创建实例后,如果我检查container.viewContext.hasChanges,则返回false 并说没有什么可保存的,如果我在moc 上调用save(为此块创建背景MOC)我得到像这样的错误:
fatal error: Failure to save context: Error Domain=NSCocoaErrorDomain Code=133020 "Could not merge changes." UserInfo={conflictList=( "NSMergeConflict (0x17466c500) for NSManagedObject (0x1702cd3c0) with objectID '0xd000000000100000 <x-coredata://3EE6E11B-1901-47B5-9931-3C95D6513974/Currency/p4>' with oldVersion = 1 and newVersion = 2 and old cached row = {id = 2; ... }fatal error: Failure to save context: Error Domain=NSCocoaErrorDomain Code=133020 "Could not merge changes." UserInfo={conflictList=( "NSMergeConflict (0x170664b80) for NSManagedObject (0x1742cb980) with objectID '0xd000000000100000 <x-coredata://3EE6E11B-1901-47B5-9931-3C95D6513974/Currency/p4>' with oldVersion = 1 and newVersion = 2 and old cached row = {id = 2; ...} and new database row = {id = 2; ...}" )}
所以我未能让并发工作,如果有人能向我解释在 iOS 10 的核心数据上使用此功能的正确方法,我将不胜感激
【问题讨论】:
-
github.com/JohnEstropia/CoreStore 将此库用于核心数据
标签: ios swift core-data concurrency