【问题标题】:Cocoa document-based application with multiple document types具有多种文档类型的 Cocoa 基于文档的应用程序
【发布时间】:2010-01-15 00:25:05
【问题描述】:

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

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

那么在不创建多个独立应用的情况下,最好的方法是什么?如何在 Interface Builder 中创建它?如何编码?

我不需要详细的源代码或其他任何东西,只需大致了解如何做到这一点,其余的我会弄清楚。

提前致谢!

【问题讨论】:

    标签: cocoa macos document-based


    【解决方案1】:

    这是 Cocoa 文档系统明确设计的目的。 Apple provides documentation,但这里是重点。

    • 每种文档都是NSDocument 的子类。如果您使用的是 Core Data,请将您的课程基于NSPersistentDocument。 (Apple 有一个 basic tutorial 介绍如何在基于文档的应用程序中使用 Core Data)
    • 您使用Info.plist 告诉 Cocoa 您的应用程序可以打开哪些文档类型以及要使用的文档类。
    • 每个NSDocument 子类都有一个或多个与之关联的NSWindowController 对象,每个对象代表一个窗口。如果您只有一个窗口,则不必继承 NSWindowController。您可以将 UI 逻辑放在文档子类中。但是,为了更简洁的代码,我强烈建议子类化NSWindowController
    • NSWindowController(和NSDocument,如果你决定不继承NSWindowController)可以从你在Interface Builder中构建的NIB加载一个窗口。事实上,这是创建文档窗口的推荐方法。

    希望这能让您大致了解如何在 Cocoa 中处理此问题。

    【讨论】:

    • +1 表示我想表达的意思,但以更清晰、更容易理解的方式。 :)
    • 该教程现在有 50% 没用,因为 Apple 已经从 Xcode 中删除了它所依赖的一半技术。有人换人吗? (到目前为止,Apple 还没有打扰 - 就好像他们自己已经放弃了 Core Data :()
    • Apple 完全支持 Core Data。我没有看到他们放弃它的任何迹象。 Xcode 4 中仍然存在所有工具,但 UI 确实发生了变化。教程的哪些部分没用?
    【解决方案2】:

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

    一旦开始运行,大部分细节都应该自动处理;但是您可能仍然需要稍微修改一下文件菜单,而且我似乎记得在设置默认文档类型时遇到了一些麻烦。

    总的来说,这并不比为单一类型的文档创建应用程序复杂多少。

    PS:请注意确保您确实需要不同的文件类型;有时,对同一个文件有几个不同的视图可能更合适。只是一个想法。 :)

    【讨论】:

    • 所以如果我得到你的正确信息,我会以一种文件格式存储我的数据,并且根据文档的类型,我只是以不同的方式显示它?这听起来很容易。但是如何创建不同的窗口类型?例如,它们需要有不同的工具栏。
    • 我写的东西听起来很混乱。我的意思是当我只有一个 NSDocument 类时,如何将它与不同的窗口类型相关联?还是我应该只有一个窗口并更改工具栏、所有面板等?但这适用于 Cocoa 的标准行为吗?喜欢“自定义工具栏”菜单功能吗?
    • 我并不是说你必须要做的就是拥有一种类型。我只是把它扔在那里。如果您有这些问题,您可能需要不同的类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多