我已经成功迁移了我的应用程序以使用NSPersistentCloudKitContainer
,以便使用CloudKit同步其数据。
但是,我想知道如何处理某些实体的唯一性。例如,假设具有属性User
的emailAddress
实体需要唯一。现在考虑两个设备使用相同的电子邮件地址创建User
实例的情况。在我当前的实现中,没有任何东西会强制执行唯一性,因此我最终在两个设备获得更改以进行同步后立即使这两个设备可用。
[当前,每当我假设实体是唯一的时,我都会检查它们是否确实存在,如果不是,则合并它们,包括将一个实例的关系分配给另一个实例。合并后,删除“空”实例。尽管这似乎可以正常工作,但我还可以假设这可能会出错:当两个设备同时合并并最终删除不同的实例而导致所有实例都被删除时。
我应该如何处理这种情况?
PS。我一直在寻找类似的问题,并且发现了一些类似的问题,但它们都与使用CKRecord
明确相关。由于我使用的是NSPersistentCloudKitContainer
,它封装并简化了CloudKit的实现,因此我不使用这类“低级”类。
Core Data具有唯一性约束,可以在单个字段或多个字段上设置。不要忘记设置mergePolicy
,因此Core Data知道保存时如何处理冲突。这是之前讨论该问题的Stack帖子。
How to add unique constraints for some fields in Core Data
CloudKit没有后端逻辑,它只是一个键/值存储。