按照核心数据编程指南的核心数据性能页面中
关于BLOB存储的建议,我选择在我的NSPersistenDocument-based
应用程序中存储二进制数据
(仅限Leopard,如果这有所不同)在外部文件中(与文档Core分开)数据数据存储)并NDAlias
在文档的数据存储中保存对该文件的存档引用.
最后,我希望外部数据文件最终与文档(数据存储)文件位于同一目录中.由于我可能需要在保存文档之前将数据写入外部数据文件(这是一个科学数据采集应用程序,如果可能,应避免因崩溃而丢失数据),我采取了以下方法:
我想在模型相关的类中封装这个外部文件的管理,因为在模式迁移期间我需要相同的功能.因此,在我的NSPersistentDocument's
子类中管理外部数据文件
似乎是错误的.
在对象模型的根对象中,我NSTemporaryDirectory()
在根对象awakeFromInsert
方法中创建外部文件
并存储NDAlias
引用数据文件.
然后,我想在保存发生时将外部数据文件移动到与保存的数据存储相同的目录.
我认为didSave
这是适当的地方,但看起来在调用didSave
方法时,持久存储仍然在临时目录中(大概是FSExchangeObjects'd
在创建原子保存操作之前).
我打算因素的逻辑awakeFromInsert
和didSave
成类的方法,使他们可以架构迁移过程中的自定义实体政策的呼吁
createDestinationInstancesForSourceInstance:entityMapping:manager:error:
and endInstanceCreationForEntityMapping:manager:error:
分别.
所以,我的问题是:在NSPersistentDocument
保存期间,我可以放心,我的根对象objectID.persistentStore.URL
是保存的"最终"URL(例如,用户选择保存文件以进行文档保存)?