私の質問は、WWDC 2014 Advanced CloudKitに名前が付けられているので、「Delta Download」に関するものです。CloudKit:CKFetchRecordChangesOperation、CKServerChangeToken、Deltaダウンロード
私はコアデータアプリケーションの同期化を試みています。これは現在のところiPhoneのみです(1つのデバイスしかアクティブではないと思います)。つまり、基本的には、今のところほとんどの場合、同じデバイスのクラウドにユーザーレコードを格納します。
CKFetchRecordChangesOperation
別名デルタダウンロードに基づくカスタムゾーン機能の理解に問題があります。
WWDCで提示されているように、同期操作(私は別のデバイスによって追加/変更/削除されたレコードのみをダウンロードすることを意味します)を維持するために、CKServerChangeToken
を持っています。 しかし、私が理解できないのは、CKFetchRecordChangesOperation
の後にのみトークンを受け取るということです。レコードをクラウドに保存すると、新しいトークンが取得されません。
そして、現在の使用可能なトークンをフェッチした場合(フェッチ後に変更されるため)、前回の保存操作で保存されたレコードを受け取ります。基本的には、私たちのデバイス上にすでに存在するレコードを保存します。どうして?私はここに何かを逃している?
クラウドに(デバイスAから)いくつかのデータをシードすると、デバイスBがゾーンレコードを取得しているときの状況は正当ですが、デバイスAがあればどうなりますか?すべてのレコードを再度ダウンロードしますか?
CKRecord
にrecordChangeTag
が見つかりました。これはローカルオブジェクトとの競合を解決するために使用できるプロパティです(フェッチされたオブジェクト(同じまたは異なるバージョン))。もしそうなら、私はこれをどうやって行う必要があるかの例を教えてください。 RecordChangeTagをコアデータに初めて記録するとCloudKitにレコードが保存されるか?
文書の欠如はそのような頭痛です。
私は実際にこの問題についてAppleにサポートケースを開いた。 'CKFetchRecordChangesOperation'を使ってデバイスからの変更についてデバイスに通知するのは意味がありません。私は平らに言われました - そうです。だからあなたのコードは、これらの重複レコードの変更をすべて処理する必要があります。 – rmaddy
@rmaddyああ、この情報をありがとう。あなたがそれを答えとして書くと、私はそれを受け入れます。なぜなら、他の答えはなく、あなたは最も近いものですからです。 –
@rmaddyリンゴのdevforum Rickに関するディスカッションを読んで、私はあなたに聞きたいのですが、PBKが提案した回避策を試しましたか?ディスカッションへのリンク:https://forums.developer.apple.com/message/77233#77233 –