2009-04-17 36 views
14

当我制作一个示例应用程序(即从一个标签栏应用程序或其他东西开始)时,在我的MainWindow.xib文件中,我看到列出了5个项目 - 文件所有者,第一响应者,应用程序委托,窗口和选项卡栏控制器。iPhone Interface Builder和委托代理

如果我再创建一个.xib文件,并为它创建一个委托,并将该文件的所有者设置为我刚创建的新委托,那么在对象列表中看不到“NewDelegateFile” )为.xib。

这对我来说没有意义,我认为这是为什么我没有赶上iPhone的发展很快。

有谁愿意花时间向我解释这个小特点?

+1

我再次问了几乎相同的问题http://stackoverflow.com/questions/1911916/placeholder-objects-in-interface-builder。这些答案应该提供更多细节并且不会让人困惑。 – Casebash 2010-03-19 23:44:31

回答

24

文件所有者不是xib文件中的真实对象。它是一个代理对象。它表示在加载时将成为xib所有者的对象。 First Responder和App Delegate也是代理服务器。第一响应者是当前位于响应者链上的对象。当应用程序的状态发生变化时,另一个对象可能是第一个响应者。您可以使用此代理对象将文件 - >保存菜单等任何对象负责在任何给定时间处理它。

应用程序委托是一个实际的对象。当xib加载时它会弹出生存。正如您在Interface Builder中看到的那样,它连接到文件所有者的委托出口。应用程序加载MainWindow.xib,它是文件的所有者。

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

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

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

有点长。希望能帮助到你。

+1

我并没有忽视这个答案。它花了我几天的时间,一遍又一遍地阅读并理解它。我想我现在就做。非常感谢。这与我的想法应该是如何不一致,但我会继续让自己的头脑尝试这样思考。非常感谢您的回复。 – 2009-04-21 19:08:55