在哪里存储 UIDocument 的预览?

Posted

技术标签:

【中文标题】在哪里存储 UIDocument 的预览?【英文标题】:Where to store a preview of a UIDocument? 【发布时间】:2012-02-06 18:18:19 【问题描述】:

我正在处理UIDocument 应用程序,我想在用户打开文档之前向他展示文档的预览。当文档关闭时,我可以将该预览呈现为图像。但是我应该在哪里保存该图像?在另一个文件中?还是有指定的方法来做到这一点?

现在我正在开发它,但不支持 iCloud。但我想要一个也适用于 iCloud 的解决方案。 UIDocumentUIManagedDocument。但是将图像保存到数据库中会使它变得毫无意义。因为那样我必须先打开文档才能获得预览。

你在这里推荐什么?在哪里可以预览UIManagedDocument

【问题讨论】:

【参考方案1】:

您可以将文档存储在 ubiquity 容器的 Documents 目录中,并将文档预览文件存储在容器的 Data 目录中。

如果预览文件名将基于文档名称,您将能够使用元数据查询结果来获取文档名称,然后解析文档预览 URL。

这样您可以只下载文档预览,而不是整个文档。

【讨论】:

【参考方案2】:

我不知道 UIManagedDocuments,但如果是 UIDocument,我建议使用 NSFileWrapper 作为文件格式(其中文档实际上是一个捆绑文件夹)并将预览保存在文档中,以 "Preview.jpg"(或 .png)的形式保存在标记为 "QuickLook" 的文件夹中。 这样,您也可以在 Mac 上的 Finder 中获得预览(免费)。

当然,这可能是也可能不是理想的解决方案(也取决于您的文档是否为纯文本)。但一般来说,这可能是使用 UIDocuments 预览的一个很好的提示。

【讨论】:

【参考方案3】:

您应该将图像保存在 (app_directory)/Library/Caches 下。这样 iCloud 就不会影响您的应用。

【讨论】:

但是这样。如果我将文档移动到 iCloud。预览在这台机器上是本地的。而且它没有通过 iCloud 同步。这意味着我必须在每个客户端上重新生成预览。为此,我必须打开/关闭每个文档一次。 那你应该把它保存在 (app_directory)/Documents.该文件夹中的所有内容都会自动与 iCloud 同步。 没有一个解决方案似乎是完美的。但我会使用 /Library/Caches,然后在所有设备上重新生成所有预览。 其实根据wwdc12的资料建议把预览文件存放在你的ubiquity container-1的Data目录下

以上是关于在哪里存储 UIDocument 的预览?的主要内容,如果未能解决你的问题,请参考以下文章

UIDocument 相关 EXC_BAD_ACCESS

使用 NSFileWrapper 在 UIDocument 中存储 BOOL

SAP中IDOC和BAPI和RFC 之间的区别

用于 SwiftUI 预览的应用数据文件存储在哪里

iOS 5 中关于 UIDocument 的说明

数据持久化方案解析(八) —— UIDocument的数据存储(一)