代码之家  ›  专栏  ›  技术社区  ›  Senseful

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

  •  0
  • Senseful  · 技术社区  · 14 年前

    假设我创建了一个新项目。现在,我在界面生成器中将两个文本字段添加到视图控制器中。我想响应文本字段创建的委托事件,但是,我不想让主视图控制器作为两个文本字段的委托。理想情况下,我希望为每个充当代理的文本字段分别创建一个文件。这些对象中的每一个都需要能够与主视图控制器交互。

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

    我尝试创建一个从nsObject继承并实现uitextfieldDelegate的新类。然后,我添加了一个名为“view controller”的同类型视图控制器实例变量,并用iboutlet标记它(这要求我添加import“myviewcontroller.h”)。

    然后,我转到Interface Builder,打开视图控制器,其中包含两个编辑框。我在表单中添加了一个nsObject,并将其类型更改为我创建的新类。我将其viewcontroller属性设置为文件的所有者,并将文本框的委托属性之一设置为指向我创建的这个新对象。

    现在,当我运行程序时,它在我触摸文本框时崩溃。它提供错误排除错误访问。我猜我没有在ib中正确地链接东西。

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

    1 回复  |  直到 14 年前
        1
  •  2
  •   Todd Yandell    14 年前

    你说得对。您的委托对象未被保留。在iPhoneOS上,NIB文件中的每个对象都初始化为保留计数1,然后自动释放。如果没有任何东西再次保留物体,它最终会被释放。

    将属性添加到视图控制器类并将其连接到委托的实例。只要您正确地定义了属性,视图控制器将保留对象,并且一切都将按预期工作。