使用 NSFileWrapper 保存文档

Posted

技术标签:

【中文标题】使用 NSFileWrapper 保存文档【英文标题】:Saving document using NSFileWrapper 【发布时间】:2015-10-20 13:03:12 【问题描述】:

我正在开发一个基于文档的应用程序,允许用户插入图像、电影来制作作品。

保存文档时,我创建了一个 directoryFileWrapper,在其中放置了我的项目的 xml 表示,并为每个图像/电影使用原始路径(如果尚未保存文档)或它的相对路径在包。

保存后,用户可以将文档移动到另一个位置/mac,并且仍然可以访问其内容。

如果用户执行“SaveAsOperation”并将其保存在同一位置,则文档首先会被删除,然后我必须重新创建它。问题是我无法使用相对路径重新创建 fileWrappers,因为文档本身已被删除。

有没有办法防止它发生? 将现有文件保存到包中的正确方法是什么?

【问题讨论】:

你覆盖了 NSDocument 的哪个方法? -fileWrapperOfType: 错误: -readFromFileWrapper:ofType:error: 那些是为了阅读。您重写了哪个 NSDocument 方法进行写作?你试过-[NSDocument writeToURL:ofType:forSaveOperation:originalContentsURL:error:]吗? -fileWrapperOfType: error: 在写操作期间被调用。我尝试了 writeToURL,但该文件在此调用之前已被删除。 【参考方案1】:

方法是:

在.h中

创建一个实例 var NSFileWrapper。

在初始化中:

创建一个空目录FileWrapper。

每次你想在包装器中添加一个文件时:

将此文件添加到目录FileWrapper 中

在-readFromFileWrapper:(NSFileWrapper *)inFileWrapper ofType:error:

使“inFileWrapper”成为您的 fileWrapper(不要忘记发布以前的并保留新的)

在-fileWrapperOfType:error:

把 fileWrapper 还给你。

如果您还想使用 NSFileWrapper,此链接可能会有所帮助 https://www.cocoanetics.com/2012/09/back-on-mac-os-x-tutorial-for-ios-developers/ 并且github repo是https://github.com/Cocoanetics/Examples

【讨论】:

以上是关于使用 NSFileWrapper 保存文档的主要内容,如果未能解决你的问题,请参考以下文章

NSFileWrapper 从 iCloud 失败并从本地目录工作

UIDocument loadFromContents 应该返回一个 NSFileWrapper;而是返回 NSConcreteData

UIDocument 是具有元数据的大型文档的合适策略吗?

使用 NSFileWrapper 在 UIDocument 中存储 BOOL

NSFileWrapper 错误写入 URL

改变说明文档显示位置wrap