objective-c - 在 Objective-C 中连接委托(delegate)类

标签 objective-c cocoa interface-builder

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

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

最佳答案

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

  1. 如果您还没有为委托(delegate)类生成代码,请选择所需的委托(delegate),然后在 IB 检查器中打开“对象标识”选项卡。添加一个 NSObject 类型的“Class outlet”。然后您应该能够将这个新导出设置为另一个代表。当然,在加载 nib 之前,您必须为您的委托(delegate)类生成代码并将生成的源文件添加到您的 Xcode 项目。

  2. 如果您已经为委托(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/

相关文章:

cocoa - 有没有办法无限期地暂停 NSTHread 并从另一个线程恢复它?

iphone - 从 XIB 创建时如何构建 UIImage?

objective-c - 如何在 Cocoa 中将 Finder Sync Extensions 与 Xcode 集成

objective-c - 使用 Cocoascript 为 NSWindow 设置背景图像

xcode - 第 3 方 Mac 开发者应用程序(当前没有匹配的配置文件)问题

ios - 有没有办法在 Interface Builder 中设置 UINavigationBar 的委托(delegate)?

ios - 使用容器 View Controller 和 Storyboard 构建滑出式菜单。我很困惑

ios - 如何在 xcode 中为 iOS 应用程序制作背景视频?

ios - 如何检查 NSMutableArray 中是否已经存在一个值?

cocoa - 如何激活 Cocoa 帮助文件中的 TOC 按钮?