iPhone界面生成器和代理

14
当我创建一个示例应用程序(例如,从选项卡栏应用程序开始),在我的MainWindow.xib文件中,我看到列出了5个项目--文件所有者,第一响应者,应用程序委托,窗口和选项卡栏控制器。
如果我创建另一个.xib文件,并为其创建一个委托,并将该文件的所有者设置为我刚刚创建的新委托,那么我在该.xib的对象列表中就看不到“NewDelegateFile”。
这对我来说没有意义,我认为这是我没有很快掌握iPhone开发的重要原因之一。
有人愿意花时间向我解释这个小特殊性吗?

1
我再次提出了几乎相同的问题https://dev59.com/1nI-5IYBdhLWcg3wVWpi。这些答案应该提供更多细节并且不那么令人困惑。 - Casebash
1个回答

24

在xib文件中,File's Owner不是真正的对象,而是一个代理对象。它代表将成为xib所有者的对象,在加载时变为该对象。First Responder和App Delegate也是代理。第一响应者是当前位于响应者链顶部的对象。当应用程序状态更改时,另一个对象可能成为第一响应者。您可以使用这个代理对象将像File-> Save菜单之类的东西连接到任何负责处理它的对象。

App Delegate是一个实际的对象。它在加载xib时启动。正如您在Interface Builder中所看到的,它连接到File's Owner的委托输出口。应用程序加载MainWindow.xib,因此它是文件所有者。

其他xib文件通常通过委托对象加载。该委托对象是文件所有者。但是该委托本身是从代码实例化的。它没有从xib加载。这就是为什么它不显示在Interface Builder中的原因。

xib文件包含实际序列化的对象。文件所有者和第一响应者是例外。它们代表其他已经存在的对象。

文件所有者(在非MainWindow.xib文件中通常是UIViewDelgate)是鸡。xib是蛋。鸡本身不包含在蛋里。

有点长。希望对你有所帮助。


1
我并没有忽略这个答案。只是我花了几天时间不断尝试和反复阅读才理解了它。现在我想我明白了。非常感谢。虽然这与我的思维方式有些不一致,但我会让自己的头脑继续尝试这种思考方式。非常感谢您的回复。 - Matt Dawdy

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