【问题标题】:Is there an easy to understand guide (new to Cocoa, Xcode, etc) for Interface Builder that talks about proxy objects?是否有关于代理对象的 Interface Builder 易于理解的指南(Cocoa、Xcode 等的新手)?
【发布时间】:2010-10-21 19:33:08
【问题描述】:

在 C/C++ 时代,真正让我着迷的语言部分是指针。当然,我现在理解它们了。

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

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

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

到目前为止,我已经浏览了以下资源: Aaron Hillegass 的 Mac OS X Cocoa 编程 实用程序员资源: 在 Xcode 中提高生产力(截屏视频) 可可编程 Objective-C 2.0 中的编码(screncast) 编写您的第一个 iPhone 应用程序(截屏视频) iPhone SDK开发

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

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

【问题讨论】:

标签: xcode cocoa cocoa-touch interface-builder


【解决方案1】:

首先,占位符在这里比代理更好。

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

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

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

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

第一响应者是独一无二的。将动作连接到第一响应者意味着当动作被触发时,它应该动态地发送到响应者链。响应者链通常从焦点视图开始,并继续向上通过视图层次结构并包括一些控制器和委托。链中的每个对象都可以处理该动作。菜单项与响应者链配合得很好。如果您有一个“Make Bold”菜单项应该使当前选定的文本变为粗体,您可能首先将其连接到 NSApplication 子类,但是您必须知道“ Make Bold”适用,以及如何处理它们。文本视图和可编辑的 Web 视图可能需要不同的代码来处理“加粗”,并且将所有这些都装在一个对象中会变得非常复杂并且不会非常可扩展。相反,您可以将“Make Bold”菜单项的操作连接到 First Responder 上的 makeBold: 操作。 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: 方法并在它们处于焦点时响应此菜单项。

【讨论】:

  • 非常感谢您的解释。这应该在书籍和 Apple 的文档中!它正是我所需要的。我现在“明白”了。
  • 顺便说一句,您应该将 Jon 关于 IB 和 NIB 文件的任何内容视为权威。
【解决方案2】:

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

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

【讨论】:

  • 我读过的所有内容都告诉我,文件的所有者、第一响应者和应用程序都是代理对象。其余的称为顶级对象。我所指的带有图标的窗口称为 Nib 文档窗口。正如我在问题中所说,我已经阅读了很多资源。我“有点”迷失了,因为我已经能够制作一些非常简单的单窗口应用程序。没有什么花哨的。当我知道在单个 XIB 中投入多少时,我开始遇到问题。用户指南告诉你一切是什么,但不是最佳实践。
  • 另外,显然,这里的帖子删除了一些格式。我有一段关于我看过的资源的段落,用行分隔。显然,这个网站不喜欢帖子中的回车。至少有一个 CR。
  • 应用程序有点不同,因为它总是连接到应用程序对象。 First Responder 不仅仅是一个 IB 概念,它正在向响应者链传递消息。 (如果你不明白它是如何工作的,请阅读它。)无论如何,每个 XIB 一个窗口和一个或多个控制器是很常见的。您正在权衡时间来解压缩对象以使用内存。再次,探索一些真正的应用程序来培养你的品味。如果您对 cme​​ts 缺乏对格式的支持有意见(我同意您的观点),请单击页面底部的“始终欢迎反馈”链接。
【解决方案3】:

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

Interface Builder User Guide: Placeholder Objects

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

【讨论】:

    【解决方案4】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    • 2012-01-20
    • 2012-04-26
    • 2011-12-23
    • 1970-01-01
    相关资源
    最近更新 更多