我猜你有两个Calculate
类的实例。您可能已经在 NIB 中实例化了一个,这就是您连接插座的方式。然后你可能会使用类似的代码在代码中实例化另一个[[Calculate alloc] init]
。这是一个不同的对象。因为它不是来自 NIB 的,所以它的插座没有连接到任何东西。
你想要一个实例。如果它真的需要连接到 NIB 中的东西,那么它通常需要在 NIB 中。(NIB 可以有一些代理对象,例如 File's Owner,它们没有在 NIB 中实例化,但您可以将它们连接到事物,并且当 NIB 加载时,这些连接将连接到真实对象。)
如果您还需要一种方法来引用 NIB 中的实例,那么您需要从其他东西(可能是您的应用程序委托)到该实例的出口。
更新:
好的。因此,您在 NIB 中有一个计算对象。那是一个真正的“冻干”物体。当 NIB 被加载时,该对象被重构并建立其连接。
您还可以Calculate
通过执行类似的操作分别在代码中实例化一个对象[[Calculate alloc] init]
,对吧?那是创建一个单独的对象。它不是 NIB 中的那个,您在 NIB 中设置的连接不会影响它。所以,它的summaryLabel
实例变量就是nil
.
您需要选择一种实例化对象的方法并坚持下去:
选项 1)您坚持使用Calculate
NIB 中的对象。因此,请删除代码中分配并初始化新代码的部分。相反,只需引用加载 NIB 时创建的现有文件。你需要一个参考。因此,在您的应用程序委托上创建一个插座以指向它并在 NIB 中连接它。
选项 2)您坚持使用Calculate
您在代码中创建的对象。所以,从你的NIB中删除一个。您在代码中创建的对象与标签没有连接,因为它不是来自 NIB。因此,您必须在代码中设置与标签的连接,就像您在代码中创建它一样。您需要对标签的引用。您可以将插座添加到应用程序委托并将其连接到标签。然后,您的应用程序委托可以calculateObject.summaryLabel = summaryLabel;
告诉Calculate
它已创建的对象有关标签的信息。