1

我有一个 OS X 应用程序,它依赖 NSPersistentDocument 和 Core Data 来处理应用程序的自定义文件类型(保存为 XML)。

我注意到,当我更新我的核心数据模型(我正在做简单的更改,依赖于轻量级迁移)时,只需使用使用新模型的应用程序打开一个文件就会更改磁盘上的文件。原始文件的备份版本也出现在磁盘上(文件名后附有“~”)。一旦发生这种情况,应用程序的先前(已发布)版本就无法打开该文件。

需要明确的是:我只是打开文件。我没有将文件保存回磁盘。我可以在 Finder 中观看,并在打开文件后立即看到“~”。

这似乎是非常危险的行为。我必须非常谨慎,永远不要打开我的用户群当前正在使用的文件,因为这样做会立即使他们无法访问。

这是默认的 OS X 行为吗?有没有办法配置 NSPersistentDocument 或我的核心数据模型,以便打开文件将内部存储更改为应用程序,但除非我明确保存,否则更改不会传播回磁盘?

4

1 回答 1

0

Core Data 似乎假设,如果您使用新程序打开旧文件,则必须继续进行迁移。根据我自己的经验,打开文件时,它是默认行为,它会自动迁移,并且不能再用以前的版本程序打开。我相信它与哈希数有关,必须更改它以允许新存储打开文件,使其成为文档中的永久更改;所以不,我认为您不能打开文件,但不能将更改传播回磁盘。也许您可以重写一个允许您在开始迁移之前制作副本的方法。

Apple 的开发人员库提到了制作的临时文件:

如果迁移成功进行,storeURL 上的现有存储会在任何文件扩展名之前使用“~”后缀重命名,并且迁移的存储会保存到 storeURL。

http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/CoreDataVersioning/Articles/vmInitiating.html#//apple_ref/doc/uid/TP40004399-CH7-SW1

于 2012-12-04T06:28:16.500 回答