我正在设计一种基于打包的 NSDocument 文件格式。该文档将包含许多目录和文件,因此我想保存一个缓存,或者作为文档的一部分,或者在应用程序的 Caches 目录中。
缓存将是一个简单的 plist 数组。
我想设计这个,以便可以通过 Dropbox 或 iCloud 同步文档。所以我遇到了一个难题……缓存失效。
如果我将缓存存储在文档包中,如果文档同时在两台机器上编辑,其中一台可能会覆盖另一台的缓存,或者它们可能需要解决冲突。
如果我将缓存存储在外部缓存目录中,可能基于文档名称或文件标识符命名,我需要一些方法来检测如果文档在其他地方更新(通过同步甚至只是从电子邮件复制的较新版本)它是陈旧的)。
外部缓存也有其他问题,例如我考虑在文档中存储 UUID 并将其用作缓存文件名,但如果文档重复,缓存将被两个文档使用,这显然是错误的被编辑。
在我看来,最安全的地方是在文档包中,但随后又回到了可能的冲突。
我还想知道如何检测变化。一个过于复杂的想法是每次保存时将一个以 UUID 命名的文件写入文档中的文件夹,然后如果那里的文件数量发生变化,则重建缓存。(更简单的方法是文档中的更改计数,但如果两台机器同时增加计数并保存,这可能会导致冲突,请记住可能存在同步延迟。)
在我看来,安全同步文档包并不是一个不常见的问题,所以我希望有人可以提供一些最佳实践建议?