我正在通过将数据从外部Web服务提取到私有CloudKit数据库的应用程序工作。该应用程序是一个单用户应用程序,但我遇到了一个竞争条件,我不知道如何避免。CloudKit:防止重复记录
我的外部数据中的每条记录都有一个唯一的标识符映射到我的CKRecord实例。一般应用程序的启动流程如下:
- 获取相关记录类型的当前CKRecords。
- 获取外部记录。
- 对于每个外部记录,如果在CloudKit中不存在,则通过批量创建(修改操作)创建它。
现在,问题是,如果此过程在用户的两个设备上同时启动,因为CK和外部提取都是异步的,所以很有可能会得到重复记录。
我知道我可以使用区域自动提交所有的CKRecord实例,但我不认为这解决了我的问题,因为如果所有这些提取都发生在同一时间,则保存并不是真正的问题。
我的问题是:
- 有谁知道的方式在所有用户的设备的“锁定”为写入专用数据库?
- 另外,有没有办法强制CKRecord字段的唯一性?
- 或者,有没有办法使用自定义值作为主键,在这种情况下,我可以使用我的外部ID作为CK ID并允许系统防止重复本身。
感谢您的帮助!
所以它看起来像我其实可以传递一个自定义名称到我自己的自定义CKRecordID,任何人都可以告诉我,如果这是正确的方式去做这件事? – nickbona
是的,你可以添加自己的CKRecordID。然后它必须在整个容器中唯一(也可以在多个记录类型中) –