CloudKit 无法与具有约束的 CoreData 同步
CloudKit fails to sync with CoreData with Constraints
我有一个带有约束的数据模型,以确保属性是唯一的。
当我重新安装应用程序时(云中的数据可用),同步失败并出现以下错误:
2020-07-16 10:33:13.401904+0200 Structured[40519:1639423] [error] error: CoreData+CloudKit: -[PFCloudKitImporterZoneChangedWorkItem applyAccumulatedChanges:error:]_block_invoke_2(440): Failed to save applied changes from import: Error Domain=NSCocoaErrorDomain Code=133021 "(null)" UserInfo={NSExceptionOmitCallstacks=true, conflictList=(
"NSConstraintConflict (0x600000ab0600) for constraint (\n day,\n month,\n year\n): database: 0xba46bc9a935a60ef <x-coredata://8AB04C93-B9EB-413F-BD0C-9EF854D89D20/Day/p1>, conflictedObjects: (\n \"0xba46bc9a934e60ef <x-coredata://8AB04C93-B9EB-413F-BD0C-9EF854D89D20/Day/p4>\"\n)"
)}
此错误重复出现几次,远程数据从未与本地可用数据同步和合并。
我正在以通常的方式初始化持久性容器:
lazy var persistentContainer: NSPersistentCloudKitContainer = {
let container = NSPersistentCloudKitContainer(name: "Today")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
container.viewContext.automaticallyMergesChangesFromParent = true
container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
return container
}()
我找到了一个类似的 issue,但没有得到答复。
您不能对 NSPersistentCloudKitContainer 使用唯一约束,阅读 here
如果您遇到开发人员错误导致的冲突,并且如果您有重复记录,您可以使用您自己的自定义 UUID 字段应用某种形式的重复数据删除。
我有一个带有约束的数据模型,以确保属性是唯一的。
当我重新安装应用程序时(云中的数据可用),同步失败并出现以下错误:
2020-07-16 10:33:13.401904+0200 Structured[40519:1639423] [error] error: CoreData+CloudKit: -[PFCloudKitImporterZoneChangedWorkItem applyAccumulatedChanges:error:]_block_invoke_2(440): Failed to save applied changes from import: Error Domain=NSCocoaErrorDomain Code=133021 "(null)" UserInfo={NSExceptionOmitCallstacks=true, conflictList=(
"NSConstraintConflict (0x600000ab0600) for constraint (\n day,\n month,\n year\n): database: 0xba46bc9a935a60ef <x-coredata://8AB04C93-B9EB-413F-BD0C-9EF854D89D20/Day/p1>, conflictedObjects: (\n \"0xba46bc9a934e60ef <x-coredata://8AB04C93-B9EB-413F-BD0C-9EF854D89D20/Day/p4>\"\n)"
)}
此错误重复出现几次,远程数据从未与本地可用数据同步和合并。
我正在以通常的方式初始化持久性容器:
lazy var persistentContainer: NSPersistentCloudKitContainer = {
let container = NSPersistentCloudKitContainer(name: "Today")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
container.viewContext.automaticallyMergesChangesFromParent = true
container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
return container
}()
我找到了一个类似的 issue,但没有得到答复。
您不能对 NSPersistentCloudKitContainer 使用唯一约束,阅读 here
如果您遇到开发人员错误导致的冲突,并且如果您有重复记录,您可以使用您自己的自定义 UUID 字段应用某种形式的重复数据删除。