【问题标题】:Connecting delegate classes in Objective-C在 Objective-C 中连接委托类
【发布时间】:2010-09-10 08:24:33
【问题描述】:

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

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

【问题讨论】:

    标签: objective-c cocoa interface-builder


    【解决方案1】:

    您可以将任一委托的出口添加到另一委托。有两种方法可以在 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 时承担订单。

    【讨论】:

      【解决方案2】:

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

      但是,根据委托类所做的事情,如果任务相似,我可能会将它们合并到一个类中。这将完全消除问题。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2023-03-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-02
          • 2011-03-30
          • 1970-01-01
          • 2011-04-12
          • 1970-01-01
          相关资源
          最近更新 更多