我正在通過將數據從外部Web服務提取到私有CloudKit數據庫的應用程序工作。該應用程序是一個單用戶應用程序,但我遇到了一個競爭條件,我不知道如何避免。CloudKit:防止重複記錄
我的外部數據中的每條記錄都有一個唯一的標識符映射到我的CKRecord實例。一般應用程序的啓動流程如下:
- 獲取相關記錄類型的當前CKRecords。
- 獲取外部記錄。
- 對於每個外部記錄,如果在CloudKit中不存在,則通過批量創建(修改操作)創建它。
現在,問題是,如果此過程在用戶的兩個設備上同時啓動,因爲CK和外部提取都是異步的,所以很有可能會得到重複記錄。
我知道我可以使用區域自動提交所有的CKRecord實例,但我不認爲這解決了我的問題,因爲如果所有這些提取都發生在同一時間,則保存並不是真正的問題。
我的問題是:
- 有誰知道的方式在所有用戶的設備的「鎖定」爲寫入專用數據庫?
- 另外,有沒有辦法強制CKRecord字段的唯一性?
- 或者,有沒有辦法使用自定義值作爲主鍵,在這種情況下,我可以使用我的外部ID作爲CK ID並允許系統防止重複本身。
感謝您的幫助!
所以它看起來像我其實可以傳遞一個自定義名稱到我自己的自定義CKRecordID,任何人都可以告訴我,如果這是正確的方式去做這件事? – nickbona
是的,你可以添加自己的CKRecordID。然後它必須在整個容器中唯一(也可以在多個記錄類型中) –