我的 Interface Builder 文件中有两个控件,我在代码中为每个控件创建了一个单独的委托(delegate)类(Control1Delegate 和 Control2Delegate)。我在界面生成器中创建了两个“对象”,将它们设为该类型,并将控件作为委托(delegate)连接到它们。代表们工作得很好。我的问题是,我需要将一位代表的信息分享给另一位代表,但我不确定如何分享。
最好的方法是什么?将两个代表合并为一个类(class),或者以某种方式访问他们都可以阅读的第三个类(class)?因为我实际上并没有在我的代码中的任何地方初始化类,所以我不确定如何获取对它的实际实例的引用(如果有它的实际实例),甚至不知道如何访问它的“主”类该项目随附。
最佳答案
您可以将任一代表的导出添加到另一个代表。有两种方法可以在 IB 中向对象添加导出(假设您使用的是 Xcode/IB 3.0 或更高版本:
如果您还没有为委托(delegate)类生成代码,请选择所需的委托(delegate),然后在 IB 检查器中打开“对象标识”选项卡。添加一个 NSObject 类型的“Class outlet”。然后您应该能够将这个新导出设置为另一个代表。当然,在加载 nib 之前,您必须为您的委托(delegate)类生成代码并将生成的源文件添加到您的 Xcode 项目。
如果您已经为委托(delegate)类生成代码(或将 NSObject 添加到 NIB 并将其类设置为 Xcode 项目中的现有类),请将实例变量添加到委托(delegate)类:
IBOutlet id outletToOtherDelegate;
只要您的 Xcode 项目处于打开状态(如 NIB 窗口左下角的绿色气泡所示),IB 将自动检测新 socket 并允许您将其分配给 NIB 中的其他委托(delegate)对象.
Cocoa 在 NIB 加载时自动连接这些 socket 。在委托(delegate)对象的实例上调用 awakeFromNib
后,您可以假设 NIB 中的所有其他对象都已实例化并且所有 socket 都已连接。但是,您不应该假定调用 awakeFromNib
的顺序。
关于objective-c - 在 Objective-C 中连接委托(delegate)类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/86797/