2017-05-06 25 views
0

我正在構建一個社交媒體應用程序,其中多個用戶可以同時編輯同一個CloudKit記錄。我是否應該實現一種鎖定機制,以便一次只能有一名用戶進行編輯(這些編輯可能會相互衝突),還是CloudKit有一個方便的內置方式來處理此問題?多個用戶編輯相同的CloudKit記錄

如果我實現了鎖定機制,我的計劃是爲可編輯記錄添加二進制屬性 - 如果其他人正在編輯,則此屬性的值爲1,如果沒有人正在編輯,則爲0。這聽起來像是一個合理的方式來做到這一點?

回答

1

Cloudkit具有管理這種稱爲更改令牌的機制。這與每次更改記錄時更新的時間戳相似。當您嘗試寫入時,您擁有的最後一個更改標記會與新數據一起傳遞到服務器。您可以設置說明服務器應如何處理衝突的策略,例如最後一位作家總是覆蓋。或者最後一位作家被拒絕。

在後一種情況下,第二個作者將收到一個NSError。嵌入在該錯誤的userInfo中的記錄有三個版本:服務器上的當前版本,您嘗試提交的版本以及共同的祖先。這可以讓你比較差異,合適的數據並重新保存。或者您可以重新獲取記錄(它將更新您的更改令牌版本),然後再次保存。

我會推薦觀看WWDC cloudkit視頻。我相信WWDC會議2014會議231,「高級Cloudkit」和WWDC 2015會議715「Cloudkit技巧和訣竅」具有最有用的信息。

+0

我知道這是一個古老的問題,但如果記錄還沒有制定,這個「改變標記」工作嗎?假設記錄使用電話號碼作爲唯一的ID和名稱作爲另一個字段。兩個人幾乎同時提交相同的身份證但姓名不同。我只想要一個人贏得勝利。 – DerrickHo328

+0

@ DerrickHo328將更改標記視爲上次寫入的時間戳。這可能不完全準確,但對於本次討論來說已經足夠接近了。因此,如果兩個人提交兩個更改,則更改令牌將在每次成功寫入時更新。您可以控制cloudkit中的衝突策略,以便始終覆蓋現有記錄或拒絕它(如上所述)。 – Thunk