15

回到 C/C++ 时代,真正让我着迷的语言部分是指针。我现在明白了,当然。

现在,Interface Builder 代理对象或更重要的是,如何使用 Interface Builder 以及在给定 XIB 的 .XIB 窗口(包含文件所有者、First Responder 等的窗口)中放置什么。

我从 Xcodes 示例和网络中找到的书籍和示例中浏览了很多示例。他们很有帮助,但我仍然感到有些失落。

我觉得理解 IB 对于理解如何编写 Mac/iPhone/iPod touch 应用程序非常重要。

到目前为止,我已经浏览了以下资源:Aaron Hillegass 的 Cocoa Programming for Mac OS X Pragmatic Programmer 资源:在 Xcode 中变得富有生产力(截屏)Objective-C 2.0 中的 Cocoa 编程编码(截屏)编写您的第一个 iPhone 应用程序(截屏)iPhone SDK开发

我还阅读了 Apple 的 Interface Builder 用户指南 PDF。

任何建议的提示/资源将不胜感激!

4

4 回答 4

44

首先,占位符是一个比代理更好的词。

通常,当您在 NIB/XIB 文件中有对象时,这意味着加载 NIB 文件将创建该实例。占位符对象是加载 NIB 文件时已经存在的对象,它们出现在 NIB 内部,以便您可以在将通过加载 NIB 创建的对象和已存在的对象之间建立连接。

文件的所有者、第一响应者和应用程序都是占位符。

文件的所有者是将加载 nib 的对象的占位符。所有 NIB 加载方法都采用“所有者”参数。当您与文件的所有者建立连接时,当它在运行时建立时,它将连接到传递给 nib 加载方法的所有者对象。许多 UIKit 和 AppKit 类为您调用 nib 加载方法。NSApplication, NSViewController, NSWindowController, UIApplication, 和UIViewController所有代表您加载 NIB 文件。当他们这样做时,他们将 self 作为所有者参数传递给 nib 加载方法。这就是为什么当您使用视图控制器或窗口控制器时,您将文件的所有者设置为您的子类,并在视图和文件所有者之间建立大部分连接。

NSApplication实例是一个简单的占位符[NSApplication sharedApplication]。这是一个全局单例,Interface Builder 中的图标代表该全局单例。加载 NIB 文件不会创建第二个NSApplication实例。相比之下,当一个 NIB 文件包含一个窗口时,如果你加载它十几次,你将有十几个窗口实例,但仍然是一个NSApplication实例。

第一响应者是独一无二的。将动作连接到第一响应者意味着当动作被触发时,它应该动态地发送到响应者链。响应者链通常从焦点视图开始,并继续向上通过视图层次结构并包括一些控制器和委托。链中的每个对象都可以处理动作。菜单项与响应者链配合得很好。如果您有一个“Make Bold”菜单项应该使当前选定的文本变为粗体,您可以先将其连接到NSApplication子类,但是你必须知道“Make Bold”适用的所有情况,以及如何处理它们。文本视图和可编辑的 Web 视图可能需要不同的代码来处理“加粗”,并且将所有这些都装瓶到一个对象中会变得非常复杂并且不会非常可扩展。相反,您可以将“Make Bold”菜单项的操作连接到makeBold:First Responder 上的操作。This would mean that when the menu item was selected, the focused object, or one of its parents that responded to makeBold:, would get the makeBold:message. 现在许多类可以实现一个makeBold:方法并在它们处于焦点时响应这个菜单项。

于 2009-05-20T06:46:30.260 回答
1

除了“文件所有者”(在加载 nib/xib 时连接)之外,您在 IB 中创建的对象是真实对象,而不是代理对象。

您可能想查看一些现有的示例代码以了解 IB 是如何连接的。您阅读过的文档/教程中是否有任何让您感到困惑的内容?“有点失落”很难做很多事情。

于 2009-04-25T17:01:10.787 回答
1

Apple 有以下文档解释了在 Interface Builder NIB/XIB 文件中找到的File's OwnerFirst ResponderApplication占位符对象:

Interface Builder 用户指南:占位符对象

我意识到在您提到的阅读 Apple 的 Interface Builder 文档的问题中,我认为将其发布在此处以供将来参考是合适的。此外,自从首次提出您的问题以来,文档已经更新,因此从那时起他们可能使事情变得更加清晰。

于 2010-02-06T00:14:51.573 回答
0

这可能会有所帮助:http ://crazyviraj.blogspot.com/2009/05/cocoa-what-is-files-owner-in-nib.html

于 2009-07-07T17:13:31.277 回答