加载NIB并重新建立连接

问题描述:

nib加载代码在实例化对象后如何建立与插座的连接?加载NIB并重新建立连接

苹果的文件说:

一旦所有的对象都被实例化和归档初始化,笔尖加载代码尝试重新建立每个对象的出口和相应的目标对象之间的连接。如果您的自定义对象具有插口,则NSNib对象会尝试重新建立您在Interface Builder中创建的任何连接。它首先尝试使用对象自己的方法建立连接。对于需要连接的每个出口,NSNib对象在对象中查找形式为setOutletName:的方法。如果该方法存在,则NSNib对象调用它,并将目标对象作为参数传递。 ...

但它是如何确定目标对象

例如我有一个对象

@interface Foo: NSObject 
{ 
IBOutlet NSButton *redButton; 
} 

... 

@end 

,并通过IB窗口上的按钮连接redButton。 nib加载代码如何建立连接?

nib文件中是否有“连接数据”?

是的,当然NIB文件必须存储这些连接。如果您在文本编辑器打开一个XIB文件,你会发现这样的片段,每出口连接:

<object class="IBConnectionRecord"> 
    <object class="IBOutletConnection" key="connection"> 
     <string key="label">launchAtLoginCheckBox</string> 
     <reference key="source" ref="1001"/> 
     <reference key="destination" ref="951818764"/> 
    </object> 
    <int key="connectionID">72</int> 
</object> 

因此,它看起来像苹果使用私有类IBConnectionRecordIBOutletConnection的实例连接建模。

+0

是的,但是如果窗口中有2个按钮,并且其中一个按钮与插座连接,加载笔尖时加载代码如何确定插座redButton与窗口中的某个按钮连接? – Dmitry 2011-04-07 10:04:12

+0

对不起,误会。我重写了我的答案。 – 2011-04-07 11:32:47