2

我目前正在为我正在尝试创建的文档制定最佳结构。该文档基本上是使用 sqlite 作为其存储的核心数据文档,但使用 Apple 提供的 NSPersistentDocument+FileWrapperSupport 来启用文件包装器支持。

该文档大量使用媒体,例如图像、视频、音频文件等,可能包含 1000 多个文件。所以我想做的是创建一个类似于以下的结构:

/myfile.ext/
/myfile.ext/store.sqlite
/myfile.ext/content/
/myfile.ext/content/images/*
/myfile.ext/content/videos/*
/myfile.ext/content/audio/*

现在,首先我创建了一个临时目录并将我的所有媒体都放在那里。基本上创建路径和文件名'/content/images/image1.jpg',因为我希望它们出现在保存的文件包装器中,然后在保存时我试图将这些全部复制到文件包装器中......

我发现这些文件确实以我想要的文件结构复制到了包装器中,但是当实际的包装器被保存时,这些文件都神奇地消失了。

伟大的。

所以,我废弃了我现有的解决方案并尝试使用文件包装器。该解决方案涉及在创建新文档时创建内容包装文件目录,或在打开文档时加载内容目录文件包装。

添加/修改图像时,我在此根内容包装器中创建了必要的目录包装器(即图像目录包装器,如果它不存在,或任何其他需要创建的中间目录包装器),然后创建一个常规媒体的文件包装器,删除该文件名的任何现有包装器(如果存在)。

保存文档只是确保将内容文件包装器添加到文档文件包装器的情况,并且文档将保存。

嗯……确实如此。第一次。但是,任何尝试进行任何后续更改,即添加图像,保存。然后替换图像,保存。未按预期运行,仅显示第一次保存的图像。

所以,我的问题是......首先,上述哪种方法是正确的,如果有的话,我做错了什么让他们失败。

其次,正如我期望管理 1000 张图像一样,使用文件包装器是处理事情的正确方式。

4

1 回答 1

0

有了这么多媒体,您可能应该让您的用户控制媒体是驻留在文档中还是文档中仅包含对媒体的引用,并且媒体驻留在其他地方,例如在由管理的库/存储库中你的申请。然后他们可以保存一个(可能大很多倍)副本,其中所有引用都已解决。

您可能希望压缩/解压缩任何目录,以免用户在尝试将文档附加到电子邮件时感到困惑。我相信 iWork 已经使用它的文档包来做这件事已经有一段时间了。

至于你做错了什么,没有人可以说,因为你没有提供任何代码来证明你在做什么。

为什么不创建一个一次性应用程序,让您选择磁盘上的文件并使用文件包装器将这些文件保存在文档中?这将使您能够处理此功能,而不会受到应用程序中其他问题的任何干扰。一旦您了解了如何使用文件包装器,您就可以将代码移植回来或只编写有效的新代码。

于 2010-09-25T01:15:18.863 回答