2017-06-20 11 views
2

CloudKitを使用してカウンタを実装したいと思います。例えばcountというフィールドがInt(64)というフィールドがあるとします。このカウンタを実装して、複数のユーザーが同時にカウントアップできるようにするにはどうすればよいですか?CloudKitで「原子インクリメント」

複数のユーザーが同時にこのカウンタをインクリメントすると、競合のために私のCKModifyRecordsOperationが失敗することがあります。私はこの失敗を抱え、再帰的に私の記録を保存しようとすることができましたが、これは大規模には機能しません。

2011年、Parseは原子増分という簡単なソリューションを発表しました。このようなコードを書くことができ、矛盾する値を作成する複数のユーザーについて心配する必要はありません:[gameScore incrementKey:@"score" byAmount:[NSNumber numberWithInt:10]。 (その投稿here

CloudKitでどうすればいいですか?

答えて

4

私はCloudKitが組み込ま同様のアトミックインクリメント機能を持っているとは思わない。しかし、同様の効果がifServerRecordUnchangedCKModifyRecordsOperationsavePolicyを設定し、serverRecordChangedエラー(docs)をチェックすることによって達成することができます。

あり、ここで少し異なる質問に対する既存の答えです:Increment field value in a CKRecord variable without fetching?

+0

私はこのためのよりエレガントなバックエンドのソリューションが存在することになることを期待していたが、これは可能な限り効率的として再保存プロセスを支援ありません。ありがとうございました。 –