使用更新的Core Data模型打开应用程序时磁盘上的文件更改

时间:2012-06-29 17:27:20

标签: macos core-data nspersistentdocument

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

我注意到,当我更新我的核心数据模型时(我正在进行简单的更改,依赖轻量级迁移)只需使用应用程序打开文件即可。使用新模型将更改磁盘上的文件。原始文件的备份版本也会出现在磁盘上(文件名附加了'〜')。一旦发生这种情况,以前(已发布)版本的应用程序就无法打开该文件。

要明确:我只是打开文件。我没有将文件保存回磁盘。我可以在Finder中观看并看到'〜'我打开文件后立即显示。

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

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

1 个答案:

答案 0 :(得分:0)

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

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

  

如果迁移成功,则storeURL上的现有商店   在任何文件扩展名和之前使用“〜”后缀重命名   已迁移的商店已保存到storeURL。

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