好的,我正在Cocoa中创建一个基于文档的应用程序,该文档的文件类型实际上是一个包。该软件包中包含一个XML设置文件,一个SQLite数据库和一个zip文件,该文件在运行时下载。现在,唯一真正改变的是XML设置文件,因为其他设置可以在运行时重新创建。

这些软件包中的每一个将只有一个窗口,因此我希望使用基于文档的窗口。这些文件也可以像该体系结构中的任何其他文件一样被复制,重命名,移动等。

但是我完全迷失了如何在文档框架中实现这一点!似乎我在文档中到处都在谈论文件的内存表示形式,然后使用在NSDocument替代之一中提供给您的路径将其写出(因为Cocoa可能移动了它,依此类推。)但同样,我使用的SQLite数据库位于磁盘上,而不位于内存中。

我到处都在寻找可重写的方法,这些方法仍然可以为我提供诸如文档的脏状态检查,打开和保存文件对话框支持之类的功能,但是我似乎找不到任何只说“这里是文件URL”的内容...打开它,只要您认为合适,尽管我确实在应用程序的委托级别上接近,至少在开始时如此。

因此,让我们假设它按预期工作。如何在我想控制是否写入磁盘的所有内容上实现保存/保存?我不想(我不能)弄乱数据结构之类的东西。我只想给用户一个psth值,用户可以在“另存为”对话框中选择该值(对于新的),并能够在其中写出我需要的内容。简单。但是,再次,来自developer.apple.com的50多页文档介绍了基于文档的体系结构,该文档告诉我在哪里重载了很多东西,但是每个文档似乎都源自文档的某种内存表示形式,这又一次并非如此。我的包裹是什么。从技术上讲,只有内部XML文件才是与文档绑定的文件。其他一切都只是对它的支持。

所以?任何人?参加者?

标记

最佳答案

我似乎找不到任何只说“这里是文件URL ...按您认为合适的方式打开”的内容。


在文档类中实现the readFromURL:ofType:error: method。或者,由于您的文档类型是包类型,请实施the readFromFileWrapper:ofType:error: method

您不必将数据读入内存;您可以使用实现的任何方法来执行所需的任何操作,包括打开数据库。


  如何在我想控制是否写入磁盘的所有内容上实现保存/保存?


实现the writeToURL:ofType:error: methodthe fileWrapperOfType:error: method

如果您已经或可以轻松地在内存中创建数据,则可以实现readFromData:ofType:error:dataOfType:error:方法。基于URL和基于文件包装器的方法适用于无法选择内存中数据的情况。文件包装器的主要用途是用于像您这样的包类型。

关于cocoa - 带包的 cocoa 应用框架,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1627659/

10-10 09:29