【发布时间】:2012-03-18 12:39:02
【问题描述】:
我正在尝试将一个 plist 和几个二进制文件(比如说图像)存储为 UIManagedDocument 的一部分。二进制文件的名称是Core Data中的一个属性,我不需要枚举它们,只需在显示相关实体时访问正确的。
我想要的文件结构是:
- <File yyyyMMdd-HHmmss>.extdoc
- StoreContent
- persistentStore
- AdditionalContent
- ListStatus.plist (used to store per document defaults)
- Images
- uuid1.png
- uuid2.png
- ...
- uuidn.png
到目前为止,我已成功按照How do I save additional content into my UIManagedDocument file packages? 中的说明进行操作,但是当我尝试添加二进制文件时,有些事情我不知道该怎么做。
- 我是否应该将 URL /the/path/File yyyyMMdd-HHmmss.extdoc/AdditionalContent(readAdditionalContentFromURL:error: 提供的默认 URL)作为 NSFileWrapper 处理?与仅使用 URL 相比,有什么优点/缺点吗?我发现使用文件包装器更复杂,因为必须使用文件包装器访问器和 NSCoder(我猜)和文件来读取 plist,我必须存储图像目录的文件包装器,然后获取相应的带有 objectForKey 的节点(我假设)。但是 Apple 的基于文档的 iOS 应用程序编程指南关于自定义格式而不是 NSData 或 NSFileWrapper 指出“请记住,您的代码必须复制 UIDocument 为您所做的工作,因此您必须处理更大的复杂性和出错的可能性更大。”我误解了吗?
- 每个文档的默认值被声明为属性:setter 修改映射 plist 的 NSDictionary 并将文档标记为已更新,getter 使用正确的键访问字典。我如何公开读取/写入二进制文件的能力?我应该向 UIManagedDocument 的子类添加方法吗? - (void)writeImage:(NSString*)uuid;和 -(UIImage *)readImage:(NSString *)uuid; 我是否应该将这些数据保存在内存中,直到文档被保存?怎么样?
- 假设 NSFileWrapper 是可行的方法,如果我打算将此文档与 iCloud 一起使用 我应该将文件协调器与文件包装器一起使用吗?如果有,怎么做?
我们将不胜感激每个问题的任何源代码。谢谢。
P.S.:我知道我可以在 Core Data 中保存一些二进制数据,但我对这种解决方案感到不舒服。除其他原因外,如果我想创建桌面应用程序,我宁愿将 PNG 数据存储为 UIImage 的序列化版本与 NSImage 不兼容的图像文件。
【问题讨论】:
标签: core-data icloud uimanageddocument nsfilewrapper