CloudKitをローカルキャッシュする際のコンフリクト
WWDCのAdvanced CloudKitとCloudKit Tips and Tricksを元に記事作成しています。
どのような時にコンフリクトが起きるのか?
レコードがロックされていないとき
0.初期状態
Place | Name | Age |
---|---|---|
iCloud | Paul | 20 |
デバイスA | Paul | 20 |
デバイスB | Paul | 20 |
1.デバイスAで変更発生
Place | Name | Age |
---|---|---|
iCloud | Paul | 20 |
デバイスA | John | 43 |
デバイスB | Paul | 20 |
2.iCloudに変更適応
Place | Name | Age |
---|---|---|
iCloud | John | 43 |
デバイスA | John | 43 |
デバイスB | Paul | 20 |
3.デバイスBで変更発生
Place | Name | Age |
---|---|---|
iCloud | Jonn | 43 |
デバイスA | John | 43 |
デバイスB | Ema | 20 |
4.iCloudへ適応
Place | Name | Age |
---|---|---|
iCloud | Ema | 43 |
デバイスA | John | 43 |
デバイスB | Ema | 20 |
コンフリクトは起きませんが、おかしなデータが出来上がります。
レコードがロックされている時
レコードの状態管理にはrecordChangeTagが使われます。
0.初期状態
Place | Name | Age | RecordChangeTag |
---|---|---|---|
iCloud | Paul | 20 | A |
デバイスA | Paul | 20 | A |
デバイスB | Paul | 20 | A |
1.デバイス1で変更発生
Place | Name | Age | RecordChangeTag |
---|---|---|---|
iCloud | Paul | 20 | A |
デバイスA | John | 43 | A |
デバイスB | Paul | 20 | A |
2.iCloudへ適応
Place | Name | Age | RecordChangeTag |
---|---|---|---|
iCloud | John | 43 | B |
デバイスA | John | 43 | B |
デバイスB | Paul | 20 | A |
iCloudとデバイス1のrecordChangeTagが同じなら変更可能。その後、新しいタグを生成
3.デバイス2で変更発生
Place | Name | Age | RecordChangeTag |
---|---|---|---|
iCloud | John | 43 | B |
デバイスA | John | 43 | B |
デバイスB | Ema | 20 | A |
4.コンフリクト!
iCloudのタグがBなのに対して、デバイス2のタグがAなのでコンフリクトが発生します。
Appleの見解
ほぼ全てでロックアップデートを使ってくれ。そしてコンフリクトの解決をしてくれ。
ロックしないのは以下のような場合:
・ 非常に激しい更新がある場合
・ ローカルの変更を強制したい時(ユーザーの選択によって)
ほぼ全てでロックアップデートを使ってくれ。そしてコンフリクトの解決をしてくれ。
ロックしないのは以下のような場合:
・ 非常に激しい更新がある場合
・ ローカルの変更を強制したい時(ユーザーの選択によって)
Author And Source
この問題について(CloudKitをローカルキャッシュする際のコンフリクト), 我々は、より多くの情報をここで見つけました https://qiita.com/yosshi4486/items/cc6bd9fb8c61f7f637e7著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .