2008-09-17 58 views
7

我在Interface Builder文件中有两个控件,每个控件都为代码创建了一个单独的委托类(Control1Delegate和Control2Delegate)。我在界面构建器中创建了两个“对象”,并将它们作为这种类型,并将控件作为代表连接到它们。代表们工作得很好。我的问题是,我需要将信息从一个代表分享给另一个代表,而我不知道如何。在Objective-C中连接委托类C

这样做的最好方法是什么?将两个代表组合成一个类,或者以某种方式访问​​他们都可以读取的第三个类?由于我实际上并没有在代码中的任何地方初始化类,所以我不确定如何获得对它的实际实例的引用(如果有实际的实例),甚至不能访问“main”类该项目随之而来。

回答

8

您可以将代理商的网点添加到其他代理商。有两种方法的插座添加到IB的对象(假设你使用的Xcode/IB 3.0或更高版本:

  1. 如果您还没有生成您的代理类的代码还没有,选择所需的然后打开IB检查器中的“Object Identity”选项卡,添加一个类型为NSObject的“Class outlet”,然后可以将这个新的出口设置为另一个委托,当然,您必须生成代码你的委托类,并添加生成的源文件到你的Xcode项目之前,你可以加载笔尖

  2. 如果您已经生成委托类的代码(或添加一个NSObject到您的NIB并将其类设置为一个exis婷类Xcode项目),实例变量添加到委托类:

    IBOutlet id outletToOtherDelegate;

    只要你的Xcode项目是开放的(由绿色泡沫所示左下方的NIB窗口),IB将自动检测新插座并允许您将其分配给NIB中的其他代表对象。

可可在NIB加载时自动连接这些插座。一旦awakeFromNib在您的委托对象的实例上被调用,您可能会认为NIB中的所有其他对象已被实例化并且所有插座已连接。但是,您不应该假定要拨打awakeFromNib的订单。

1

我认为你可以在每个插座上创建插座并交叉绑定它们,以便它们每次都有相同的数据。如果他们需要共享一个模型对象,那就很整洁。我其实不知道该怎么做;我想我一次在iPhone教程中看到它!

1

因为我在工作中,我目前没有我的Mac在我面前,但是是否可以将一个代表的实例绑定到另一个代表的成员?例如,这与将NSArrayController绑定到另一个控制器类的成员相似。

但是,根据委托类正在做什么,如果任务是类似的,我可能会将它们组合成一次类。这将完全消除这个问题。