iphone - 使用 Interface Builder 将不同对象设置为委托(delegate)的正确方法是什么?

标签 iphone cocoa xcode delegates interface-builder

假设我创建了一个新项目。我现在向 Interface Builder 中的 View Controller 添加两个文本字段。我想响应文本字段创建的委托(delegate)事件,但是,我不想让主视图 Controller 充当两个文本字段的委托(delegate)。理想情况下,我希望为每个充当委托(delegate)的文本字段提供一个单独的文件。这些对象中的每一个还需要能够与主视图 Controller 交互。

我的问题是如何设置它并正确链接所有内容?

我尝试创建一个继承自 NSObject 并实现 UITextFieldDelegate 的新类。然后,我添加了一个与 View Controller 类型相同的名为“viewController”的实例变量,并用 IBOutlet 对其进行了标记(这需要我添加 #import“myViewcontroller.h”)。

然后我转到 Interface Builder 并打开我的 View Controller ,其中包含两个编辑框。我向表单添加了一个 NSObject,并将其类型更改为我创建的新类。我将其 viewController 属性设置为文件的所有者,并将文本框的委托(delegate)属性之一设置为指向我创建的这个新对象。

现在,当我运行该程序时,当我触摸文本框时它会崩溃。它给出错误 EXC_BAD_ACCESS。我猜我没有在 IB 中正确链接内容。

有些事情我不确定哪些可能是问题所在:
IB 是否会自动知道通过将 NSObject 放置在 ViewController 中来创建该类的实例?即使它同时创建自己,它能否正确地将 viewController 属性分配给它自己的实例?也许问题是这个新对象没有被任何东西保留?

最佳答案

你是对的。您的委托(delegate)对象不会被保留。在 iPhone OS 上,nib 文件中的每个对象都使用保留计数 1 进行初始化,然后自动释放。如果没有任何东西再次保留该对象,它最终将被释放。

将属性添加到 View Controller 类并将其连接到委托(delegate)的实例。只要正确定义属性, View Controller 就会保留该对象,一切都会按预期工作。

关于iphone - 使用 Interface Builder 将不同对象设置为委托(delegate)的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2481731/

相关文章:

iphone - 如何在Objective-C中将键值对添加到plist文件

iphone - 是否可以获取 iPhone 上安装的所有应用程序的信息?

macos - 用于在沙盒环境中激活其他应用程序的菜单项的 CGEventPostToPSN() 替代方案?

objective-c - 在 Xcode 4.2 中找不到框架 header ,但应用程序运行正常

ios - 命令行构建一个没有开发团队的 iOS 示例项目

ios - 如何使用 Swift 5 从 iOS13 中的后台应用程序获取事件应用程序的名称?

ios - 适用于 iPhone 和 iPad 的动态 xib 布局

objective-c - 如何将 NSString 对象中的字符转换为 UILabel 对象?

objective-c - 与 Web 服务器的持久连接(如 Web 上的 AJAX)

cocoa - 'NSDictionary' 可能无法响应 '+dictionaryWithJSONString' ... 使用 TouchJSON 时