パッケージベースの NSDocument ファイル形式を設計しています。ドキュメントには多数のディレクトリとファイルが含まれるため、キャッシュをドキュメントの一部として、またはアプリケーションの Caches ディレクトリに保存したいと考えています。
キャッシュは単純な plist 配列になります。
ドキュメントを Dropbox または iCloud 経由で同期できるように、これを設計したいと考えています。だから私は難しい問題の1つに直面しています...キャッシュの無効化。
ドキュメント パッケージにキャッシュを保存した場合、ドキュメントが 2 台のマシンで同時に編集されると、一方が他方のキャッシュを上書きするか、競合の解決が必要になる可能性があります。
おそらくドキュメント名またはファイル識別子に基づいて名前が付けられた外部 Caches ディレクトリにキャッシュを保存する場合、ドキュメントが他の場所で更新された場合 (同期または電子メールからコピーされた新しいバージョンであっても)、古いものであることを検出する何らかの方法が必要です。 )。
外部キャッシュには他の問題もあります。たとえば、ドキュメントに UUID を保存し、それをキャッシュ ファイル名として使用することを考えましたが、ドキュメントが複製されている場合、キャッシュは 2 つのドキュメントで使用されます。編集されます。
最も安全な場所はドキュメント パッケージ内にあるように思えますが、競合が発生する可能性があります。
また、変化をどのように検出するかについても疑問に思いました。非常に複雑なアイデアの 1 つは、保存するたびに UUID 名のファイルをドキュメント内のフォルダーに書き込み、そこにあるファイルの数が変わった場合はキャッシュを再構築するというものでした。(より単純なアプローチはドキュメントの変更カウントですが、2 台のマシンがカウントをインクリメントして同時に保存すると、競合が発生する可能性があります。同期の遅延が発生する可能性があることを念頭に置いてください。)
ドキュメント パッケージを安全に同期することはそれほど珍しい問題ではないように思えます。