我的Interface Builder文件中有两个控件,每个控件我都在代码中创建了一个单独的委托类(Control1Delegate和Control2Delegate)。我在界面构建器中创建了两个“对象”,使它们成为该类型,并将控件作为委托连接到它们。代表工作得很好。我的问题是,我需要将一个代表的信息分享给另一个代表,我不确定如何。
最好的方法是什么?将两个代表组合成一个类,或者以某种方式访问他们都能阅读的第三个类?因为我实际上并没有在我的代码中的任何地方初始化类,所以我不确定如何获取对它的实际实例的引用(如果有实际的实例),或者甚至访问“main”类,该项目随之而来。
答案 0 :(得分:8)
您可以将委托中的出口添加到其他委托。有两种方法可以在IB中为对象添加插座(假设您使用的是Xcode / IB 3.0或更高版本:
如果尚未为委托类生成代码,请选择所需的委托,然后在IB检查器中打开“对象标识”选项卡。添加NSObject类型的“类出口”。然后,您应该能够将此新插座设置为另一个代理。当然,您必须为委托类生成代码,并在生成nib之前将生成的源文件添加到Xcode项目中。
如果您已经为委托类生成了代码(或者将NSObject添加到您的NIB并将其类设置为Xcode项目中的现有类),请将一个实例变量添加到委托类:< / p>
IBOutlet id outletToOtherDelegate;
只要您的Xcode项目处于打开状态(如NIB窗口左下方的绿色气泡所示),IB将自动检测新的插座,并允许您将其分配给NIB中的其他委托对象
Cocoa在NIB加载时自动连接这些插座。在委托对象的实例上调用awakeFromNib
后,您可以假设已实例化NIB中的所有其他对象并且已连接所有出口。但是,您不应该在调用awakeFromNib
时接受订单。
答案 1 :(得分:1)
我认为你可以在每一个上创建出口并交叉绑定它们,这样它们每个都有相同的数据。如果他们需要共享一个模型对象,那就非常整洁了。我实际上不知道该怎么做;我想我曾经在iPhone教程中看过它了一次!
答案 2 :(得分:1)
由于我在工作,我目前没有在我面前使用我的Mac,但是可以将一个委托的实例绑定到另一个委托的成员吗?这类似于将NSArrayController绑定到另一个控制器类的成员,例如。
但是,根据委托类的作用,如果任务相似,我可能只将它们组合成一次。这将完全消除这个问题。