7

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

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

4

3 回答 3

8

您可以将任一代表的出口添加到另一个代表。有两种方法可以向 IB 中的对象添加插座(假设您使用的是 Xcode/IB 3.0 或更高版本:

  1. 如果您还没有为您的委托类生成代码,请选择所需的委托,然后在 IB 检查器中打开“对象身份”选项卡。添加一个 NSObject 类型的“类出口”。然后,您应该能够将此新出口设置给其他代表。当然,您必须为您的委托类生成代码并将生成的源文件添加到您的 Xcode 项目中,然后才能加载 nib。

  2. 如果您已经为委托类生成了代码(或向您的 NIB 添加了一个 NSObject 并将其 Class 设置为 Xcode 项目中的现有类),请向委托类添加一个实例变量:

    IBOutlet id outletToOtherDelegate;

    只要您的 Xcode 项目处于打开状态(如您的 NIB 窗口左下角的绿色气泡所示),IB 就会自动检测新的插座并允许您将其分配给您的 NIB 中的另一个委托对象。

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

于 2008-09-17T21:51:37.100 回答
1

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

于 2008-09-17T19:49:26.893 回答
1

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

但是,取决于委托类正在做什么,如果任务相似,我可能会将它们组合到一个类中。那将完全消除问题。

于 2008-09-17T19:49:58.530 回答