我正在构建一个社交媒体应用程序,多个用户可以同时编辑相同的CloudKit记录。我是否应该实现一种锁定机制,以便一次只有一个用户可以编辑(这些编辑可能会相互冲突),或者CloudKit有没有一个方便的内置方法来处理这个问题?
如果我实现一种锁定机制,我的计划是向可编辑记录添加一个二进制属性--如果其他人正在编辑,则该属性的值为1,如果当前没有人在编辑,则该属性的值为0。这听起来像是一种合理的方式吗?
发布于 2017-05-06 12:32:24
Cloudkit有一种用于管理这种情况的机制,称为change token。它类似于每次记录更改时更新的时间戳。当您尝试写入时,您拥有的最后一个更改令牌将随新数据一起传递给服务器。您可以设置说明服务器应如何处理冲突的策略,例如最后一个编写器始终覆盖。或者最后一个写手被拒绝了。
在后一种情况下,第二个写入器将收到一个NSError。该错误的userInfo中嵌入了该记录的三个版本:服务器上的当前版本、您尝试提交的版本和公共祖先。这使您可以比较差异,适当地合并数据并重新保存。或者,您可以重新获取记录(这将更新更改令牌的版本),然后再次保存。
我推荐观看WWDC cloudkit视频。我相信WWDC 2014年第231期“高级Cloudkit”和WWDC 2015年715期"Cloudkit提示和技巧“都有最有用的信息。
https://stackoverflow.com/questions/43816502
复制相似问题