我有一个OS X应用程序,它依赖于NSPersistentDocument和Core Data来处理应用程序的自定义文件类型(保存为XML)。
我注意到,当我更新我的核心数据模型时(我正在进行简单的更改,依赖于轻量级迁移),只需使用使用新模型的应用程序打开文件即可更改磁盘上的文件。原始文件的备份版本也会显示在磁盘上(文件名后附加"~")。一旦发生这种情况,应用程序的先前(已发布)版本将无法打开该文件。
需要明确的是:我只是打开文件。我没有将文件保存回磁盘。我可以在 Finder 中观看,并在打开文件后立即看到"~"出现。
这似乎是非常危险的行为。我必须非常谨慎,永远不要打开我的用户群当前正在使用的文件,因为这样做会立即使他们无法访问它。
这是默认的 OS X 行为吗?有没有办法配置 NSPersistentDocument 或我的核心数据模型,以便打开文件会在应用程序内部更改存储,但除非我明确保存,否则更改不会传播回磁盘?
Core Data似乎假设,如果您使用新程序打开旧文件,则必须继续进行迁移。根据我自己的经验,默认行为是打开文件时,它会自动迁移,并且不能再使用以前的版本程序打开。我相信这与哈希数字有关,必须对其进行更改以允许新商店打开文件,使其成为文档中的永久更改;所以不,我认为你不能打开文件,但不能将更改传播回磁盘。也许您可以覆盖允许您在开始迁移之前创建副本的方法。
Apple的开发人员库提到了制作的临时文件:
如果迁移成功进行,则 storeURL 中的现有存储 在任何文件扩展名之前使用"~"后缀重命名,并且 已迁移的商店已保存到商店网址。
http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/CoreDataVersioning/Articles/vmInitiating.html#//apple_ref/doc/uid/TP40004399-CH7-SW1