objective-c - 使用 ZIP 存档存储 NSDocument 数据

标签 objective-c cocoa zip nsdocument nsfilewrapper

我注意到 Apple 开始使用 zip 存档来替换 iWork 应用程序中的文档包(文件夹在 Finder 中显示为单个文件)。我正在考虑做同样的事情,因为我不断收到与我的文档包相关的支持电子邮件,这些电子邮件在将它们复制到 Windows 文件服务器时被损坏。

我的问题是在基于 NSDocument 的应用程序中执行此操作的最佳方法是什么?

我想最简单的方法是创建目录文件包装器,创建它的存档并将其返回到 NSDocument 的

- (NSFileWrapper *)fileWrapperOfType:(NSString *)typeName error:(NSError **)outError

但我不明白如何创建 NSFileWrapper 的 zip 存档。

最佳答案

如果您只想将 zip 文件制作成您的格式(即“mydoc.myextension”实际上是一个 zip 文件),则没有方便的内置 Cocoa 机制来使用代码创建 zip 存档。看看这个 Google 代码项目:ziparchive不过,我不认为文件包装器在这种情况下会有帮助。

既然你引用了 iWork,我不拥有 iWork 09,但以前的版本使用包格式(即 NSFileWrapper 是理想的)但压缩描述文档结构的 XML,同时保留附件(如嵌入式媒体、图像等)在一个资源文件夹中,都在包中。我认为他们这样做是因为 XML 对于大型、复杂的文档来说可能非常大,但压缩得很好,因为它是文本。这会导致文档整体变小。

如果 Apple 确实已经开始将整个文档制作成一个大的 zip 存档(我觉得这很奇怪),他们要么将必要的资源提取到某个临时文件夹中,要么将整个文件加载到内存中(从他们基于包的方法,IMO)。这些也是您需要考虑的注意事项。

关于objective-c - 使用 ZIP 存档存储 NSDocument 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1741070/

相关文章:

cocoa - 从 cocoa 应用程序中使用 Qt 小部件

cocoa - NSScrollView设置放大倍数后重画

ios - Zip 库问题

linux - 如何在 Linux 中压缩和 tar 文件夹

objective-c - 通过 Obj-C 桥接 header 将 sqlite3.h 导入 Swift 项目不起作用

ios - 将 UIImageView 添加到 rootViewController

ios - AMSlideMenu 崩溃 : Receiver (<MenuViewController: 0x10db0da10>) has no segue with identifier 'rightMenu'

cocoa - 地址簿线程安全和性能

python - 如何有效地将数百万条记录从大型压缩 csv 文件插入到 mongo DB 中?

iphone - 圆形自定义按钮的事件区域较小