Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有多种文档类型的基于Cocoa文档的应用程序_Cocoa_Macos_Document Based - Fatal编程技术网

具有多种文档类型的基于Cocoa文档的应用程序

具有多种文档类型的基于Cocoa文档的应用程序,cocoa,macos,document-based,Cocoa,Macos,Document Based,我想在Cocoa中构建一个基于文档的应用程序,但它可以创建和处理不同类型的文档。将Word、Excel、Powerpoint集成到一个应用程序中,只需简单得多。但是每个窗口都会根据文档的类型而有所不同 对于存储,我将使用CoreData。我考虑添加一个指定文档类型的字段,因为它们都应该有相同的文件结尾 那么,如果不创建几个独立的应用程序,最好的方法是什么呢?如何在Interface Builder中创建它?我该如何编写代码 我不需要详细的源代码或任何东西,只是如何做到这一点的一般想法,我会找出其

我想在Cocoa中构建一个基于文档的应用程序,但它可以创建和处理不同类型的文档。将Word、Excel、Powerpoint集成到一个应用程序中,只需简单得多。但是每个窗口都会根据文档的类型而有所不同

对于存储,我将使用CoreData。我考虑添加一个指定文档类型的字段,因为它们都应该有相同的文件结尾

那么,如果不创建几个独立的应用程序,最好的方法是什么呢?如何在Interface Builder中创建它?我该如何编写代码

我不需要详细的源代码或任何东西,只是如何做到这一点的一般想法,我会找出其余的


提前谢谢

首先为每种文档类型创建一个NIB;以及每个应用程序的
NSDocument
子类(使用现有的基于文档的应用程序示例NIB进行设置)。然后将这些类设置为处理应用程序属性列表中的各种文档类型;就我所记得的,XCode中隐藏了一些有用的工具

一旦开始运行,大部分细节都应该自动处理;但是您可能仍然需要对文件菜单进行一点修改,我似乎记得在设置默认文档类型等方面存在一些问题

总的来说,这并不比为一种文档创建一个应用程序复杂多少


注意:一定要确保你真的需要不同的文件类型;有时,对同一个文件使用多个不同的视图可能更合适。只是一个想法。:)

这是Cocoa文档系统的明确设计目标。苹果,但这里是亮点

  • 每种文档都是
    NSDocument
    的一个子类。如果您使用的是核心数据,请改为将类基于
    NSPersistentDocument
    。(苹果公司对如何在基于文档的应用程序中使用核心数据有自己的看法)
  • 您可以告诉Cocoa应用程序可以打开的文档类型,以及要使用的文档类
  • 每个
    NSDocument
    子类都有一个或多个与之关联的
    NSWindowController
    对象,每个对象表示一个窗口。如果只有一个窗口,则不必子类化
    NSWindowController
    。您可以将UI逻辑放入文档子类中。然而,对于更干净的代码,我强烈建议子类化
    NSWindowController
  • NSWindowController
    (以及
    NSDocument
    ,如果您决定不将其子类化
    NSWindowController
    ),则可以从Interface Builder中构建的NIB加载窗口。事实上,这是创建文档窗口的推荐方法

希望这能让您大致了解如何在Cocoa中实现这一点。

因此,如果我让您知道正确的方法,我会将数据存储在一个文件格式中,并根据文档的类型以不同的方式显示?听起来很容易。但是如何创建不同的窗口类型呢?例如,他们需要有不同的工具栏。我写的东西听起来很混乱。我的意思是,当我只有一个NSDocument类时,如何将它与不同的窗口类型相关联?或者我应该也只有一个窗口,并更改工具栏、所有面板等。?但这是否符合可可豆的标准行为?就像“自定义工具栏”菜单功能一样?我并不是说你必须要做的是有一种类型;我只是把它扔出去。如果你有这些顾虑,你可能需要不同类型的顾虑。+1表达我想表达的意思,但要以更清晰、更易懂的方式表达。:)该教程现在50%无用,因为苹果已经从Xcode中删除了它所依赖的一半技术。有人要替换吗?(苹果到目前为止还没有为此烦恼,就好像他们自己已经放弃了核心数据:()苹果完全支持核心数据。我看不到他们放弃它的任何迹象。所有的工具仍然存在于Xcode 4中,但用户界面确实发生了变化。教程的哪些部分是无用的?