"Atomic increment" 和 CloudKit

"Atomic increment" with CloudKit

我想使用 CloudKit 实现一个计数器。假设我有一个名为 count 的字段,类型为 Int(64)。我怎样才能实现这个计数器,以便多个用户可以同时递增它?

如果多个用户同时递增此计数器,我的 CKModifyRecordsOperation 可能会因为冲突而失败。我可以接受这个失败并递归地尝试保存我的记录,但这在规模上不起作用。

2011 年,Parse 推出了一个称为原子增量的简单解决方案。您可以编写这样的代码,而不用担心多个用户创建冲突的值:[gameScore incrementKey:@"score" byAmount:[NSNumber numberWithInt:10]。 (那个posthere)

如何使用 CloudKit 执行此操作?

我不相信 CloudKit 具有类似的内置原子增量功能。但是可以通过将 CKModifyRecordsOperation 上的 savePolicy 设置为 ifServerRecordUnchanged 来实现类似的效果并检查 serverRecordChanged 错误 (docs).

这里有一个稍微不同的问题的现有答案: