Mac OS X上的Cocoa应用程序架构

16

我在长时间从事iPhone开发之后又开始进行Mac上的Cocoa开发。我的以前在Mac上使用Cocoa的经验仅限于一些小工具。我想要构建一些严肃的东西。

看着像iPhoto(或Mail或Things等)这样的现代Cocoa应用程序,许多应用程序都使用单窗口,源列表为基础的方法。我正在尽最大努力理解它,因为它似乎提供了良好的体验。然而,我有点困难。以下是我认为它应该是什么样子,但我想知道别人是如何做到的,什么才是真正的最佳方式:

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

  • WindowController加载一个窗口,该窗口本质上只有一个NSSplitView。

  • 分裂视图的左侧有一个NSTableView或NSOutlineView,设置为SourceList样式。

  • 右侧根据表格视图选择的项具有应用程序的主要内容。

我会假设某个地方(在哪里?)有NSViewControllers管理右侧将出现的各个视图(考虑iPhoto有所有照片、事件、面孔、地点等,我想它们都可以出现在不同的nib中…这是正确的吗?)。

那些视图控制器可能绑定到左侧的源列表..这是怎么做的(源列表由NSArrayController和NSViewControllers支持?)。

总之,这是我的想法,我完全错了还是...?我在网上找到了这篇文章here,以及查看了一些苹果源代码,但我似乎无法理解它。欢迎任何指导。

2个回答

6
将视图分解成单独的nib文件,主要是为了在需要时可以懒加载并更换一些视图。在现代应用程序中,你会使用NSViewController或者来自KTUIKit的KTViewController(参见她共同撰写的有关NSViewController的文章)。
然而,并不是所有情况都适合采用单窗口界面,对于复杂的应用程序,将其分解成多个窗口可能更好;iTunes和Xcode都提供了许多这方面的例子(尤其是后者,因为你可以在单窗口和多窗口之间进行切换)。

你需要考虑多窗口界面还是单一窗口界面对于你的应用程序更好。并不是所有的应用程序都有一个适合所有情况的答案;它完全取决于你的应用程序、你想要它做什么以及你想要它看起来如何 - 只有你(如果你有团队,那么也包括你的团队)才能回答这个问题。你可能需要进行一些纸质原型设计,以便在各个方向上进行快速实验,这样你就可以将两种UI的模拟示例相互对比。


我确实认真考虑过这个问题,我认为它对我的情况很有效。我认为每个不同的视图都足够不同,需要自己的nib文件,但是我不确定。在进行iPhone开发时,我很少使用InterfaceBuilder,但由于Bindings与其完美集成,我认为现在是我开始更多地使用它的时候了。我也读过Cathy的文章,但这又是一个朝不同方向拉扯的因素,因此我对它应该如何运作感到困惑。 - jbrennan
真正的问题不在于视图有多么不同,而在于你将用它们来做什么——你将放置哪些模型对象。如果这两个视图显示不同类型的内容,则它们应该是不同的视图,每个视图都有自己的nib文件。 - Peter Hosey
是的,它们将是不同的笔画,因为它们显示不同类型的内容。那么如何切换笔画呢?当我在我的Sourcelist中选择一个不同的行时,如何触发加载一个新的笔画?(此外,应该加载一个新的ViewController,还是仅仅交换右侧视图?) - jbrennan
我相信你已经将源列表的 selectedRowIndexes 绑定到窗口所有者的一个属性上,它会负责为新选择的索引加载适当的视图控制器。更具体地说,我不清楚,因为我只制作过多窗口界面。 - Peter Hosey

4

了解Nib文件如何分割的简单方法是打开iPhoto目录,逐个打开Nib文件

如果你想更深入地了解类结构,可以尝试使用F-Script进行浏览。


我之前查看过他们的一些 nib 文件,但其中许多是编写于 NSViewController 等美好工具出现之前的老应用程序,因此从概念上讲,我想知道在今天的技术条件下构建它们的最佳方式是什么。 - jbrennan
@cobbal,“开始打开nibs”是什么意思?当我浏览应用程序包的内容并尝试从Finder中直接打开它们时,会出现错误或者没有显示。当我使用旧版(3.2)的Interface Builder时,它会显示“编译的nibs无法打开”,或者在Xcode 4中只显示一个巨大的nib图标。 - febeling
@febeling 这些信息可能已经过时了,但对于我来说,Xcode(4.2)可以打开iPhoto('09)的nibs。 - cobbal
@cobbal,进一步挖掘发现了一些东西。由于Snow Leopard的nibs是编译的。以前它们是捆绑目录,现在它们是二进制plist文件。我能够像你描述的那样在我的系统上打开几个旧的nib文件。这个页面描述了一个无聊/有趣的黑客来解决编译nib文件的限制:http://www.macstories.net/tutorials/how-to-edit-nib-files-in-snow-leopard/ 未编译、可打开和可编辑的nib文件通常包含三个文件:keyedobjects.nib、classes.nib和info.nib。感谢您指出方向! - febeling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接