私はドキュメント ベースのアプリ (Mac & iOS) を持っており、ユーザーを煩わすことなくバージョンの競合を自動的に解決する良い方法を見つけようとしています。
私のドキュメントは、実際には、テキスト ファイルとして保存された小さなメモがたくさんあるファイル パッケージです。バージョンの競合の最も可能性の高いシナリオは、ユーザーが各デバイスで異なるメモを変更したため、それぞれの最新のものを選択するだけでそれらをマージできるはずです.
ただし、NSFileVersion を使用すると、現在の (最新の)バージョンと競合するバージョンしか取得できませんが、変更を失うことなくメモを使用できることを知るには、共通の祖先の変更日を知る必要があります。
フロー例:
Both clients start with note1.txt: base
Client 1 Client 2
-------------- ----------------
note1.txt: foo
note1.txt: bar
note2.txt: hey
上記に基づいて、クライアント 2 のバージョンは最新になります。これは、note2.txt が最新の保存操作であったためです。
上記の場合、クライアント 2 が行った変更 ("foo") が失われてしまうため、note1.txt の最新バージョンを単純にマージすることはできません。最初にクライアント 2 の note1.txt を見て、それが共通の祖先 (「ベース」) と比較して変更されているかどうかを確認する必要があります。
シンプルでエレガントなソリューションですが、NSFileVersion
何かが欠けていない限り、これだけではできないと思います。
別の方法として、何らかのタイムスタンプ付きのトランザクション ログを使用することもできますが、これはかなり複雑になります...