【问题标题】:Cocoa application architecture on Mac OS XMac OS X 上的 Cocoa 应用程序架构
【发布时间】:2009-09-03 02:34:56
【问题描述】:

在长期从事 iPhone 工作之后,我将重新开始在 Mac 上进行 Cocoa 开发。我之前在 Mac 上使用 Cocoa 的经验只是一些极小的工具。我正在寻找一些严肃的东西。

查看现代 Cocoa 应用程序,例如 iPhoto(或 Mail 或 Things 或....),许多应用程序使用单窗口、基于 Source-List 的方法。我正在尽力解决这个问题,因为它似乎提供了很好的体验。但是,我遇到了一些麻烦。这是我认为它应该看起来的样子,但我想知道其他人是如何做到的,以及真正最好的方法是什么:

  • 应用程序的起点是一个 AppDelegate 对象,该对象在启动后会从 nib 创建一个 Window[Controller?],并设置其数据(例如来自 CoreData)

  • WindowController 加载一个窗口,其中基本上只有一个 NSSplitView。

  • splitview 的左侧有一个设置为 SourceList 样式的 NSTableView 或 NSOutlineView。

  • 右侧是应用程序的主要内容,具体取决于选择了表格视图的哪个项目。

我会假设某处(在哪里?)有 NSViewControllers 管理将出现在右侧的每个不同视图(想想 iPhoto 如何拥有所有照片、事件、面孔、地点等,我想它们都可能出现在不同的笔尖...这是正确的吗?)。

那些视图控制器可能绑定到左侧的源列表。它是如何工作的(源列表可能由 NSViewControllers 的 NSArrayController 支持?)。

无论如何,这些都是我的想法,我是完全脱离基地还是......?我浏览了网络,找到了这篇文章here,并且查看了一些 Apple 源代码,但我似乎无法理解它。欢迎任何指导。

【问题讨论】:

    标签: cocoa architecture interface-builder cocoa-bindings nsviewcontroller


    【解决方案1】:

    如果您要将某些视图换成其他视图,则将视图分成单独的 nib 主要是好的,因为您可以懒惰地加载它们。是的,在现代应用程序中,您将使用 NSViewController,或者可能来自 KTUIKit 的 KTViewController(请参阅 the posts she co-wrote about NSViewController

    但是,不要只是跑到源列表的怀抱中。单窗口界面可能适用于简单的应用程序,但当您有很多事情要做时,它很快就会变得笨拙,因为将它们分成单独的窗口可能会更好地服务; iTunes 和 Xcode 都提供了很多这样的例子(尤其是后者,因为你可以在 SWI 和 MWI 之间切换)。

    您需要考虑是多窗口界面还是单窗口界面更适合您的应用。所有应用程序都没有一个答案;这完全取决于您的应用程序、您希望它做什么以及您希望它的外观——您(加上您的团队的其他成员,如果您有的话)是唯一可以回答这个问题的人。您可能需要做一些纸质原型设计,以便在每个方向上进行快速实验,以便您至少可以将两个 UI 的假示例相互对照。

    【讨论】:

    • 我确实考虑了很多,我认为它适合我的情况。我认为每种不同的观点都会有足够的不同,足以保证有自己的笔尖,但我又不确定。在做 iPhone 工作时,我很少使用 InterfaceBuilder,但是由于 Bindings 很好地集成到它,我认为是时候开始更多地使用它了。我也读过 Cathy 的文章,但这是另一个方向的拖船,因此我对它应该如何工作感到困惑。
    • 真正的问题不是视图有多么不同,而是您将它们用于什么——您将在其中放入什么模型对象。如果两个视图显示不同种类的东西,它们应该是不同的视图,每个视图都有自己的 nib。
    • 对,它们会是不同的笔尖,因为它们显示不同类型的东西。笔尖的切换将如何工作?当我在 Sourcelist 中选择不同的行时,如何触发加载新笔尖? (另外,应该加载一个新的 ViewController,还是只换掉右侧的视图?)
    • 我相信您会将源列表的selectedRowIndexes 绑定到窗口所有者的属性,这将负责在新选择的索引处为源加载适当的视图控制器。更具体地说,我不知道,因为我只做过多窗口界面。
    【解决方案2】:

    了解笔尖拆分方式的一种简单方法是进入 iPhoto 目录并开始打开笔尖

    如果您想进一步了解类结构,可以尝试使用F-Script 浏览

    【讨论】:

    • 我以前看过他们的一些 nib,但其中许多是较旧的应用程序,是在 NSViewController 之类的好东西之前编写的,所以我想知道,从概念上讲,构建它们的最佳方法是什么鉴于当今的技术。
    • @cobbal “开始打开笔尖”是什么意思?当我浏览应用程序包的内容并尝试从 Finder 中打开它们时,会导致错误或显示不多。当我使用旧的 (3.2) Interface Builder 时,它说“无法打开已编译的 nib”,或者只是在 Xcode 4 中显示一个巨大的 nib 图标。
    • @febeling 很可能这些信息现在已经过时了,但对我来说 Xcode (4.2) 可以打开 iPhoto ('09) 的 nib。
    • @cobbal 进一步挖掘它揭示了一些东西。由于 Snow Leopard 笔尖已编译。以前,它们是捆绑目录,现在它们是二进制 plist。正如你所描述的,我能够在我的系统上打开几个旧笔尖。这个页面描述了一个轻率/有趣的 hack 来解决编译 nib 的限制:macstories.net/tutorials/how-to-edit-nib-files-in-snow-leopard 未编译、可打开和可编辑的 nib 似乎通常包含三个文件:keyedobjects.nib、classes.nib 和 info.nib。感谢您指向那个方向!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 2011-03-09
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多