0

这适用于 Mac 应用程序,“setText”适用于 iOS

我通常将所有代码都填充到 AppDelegate 类中,但我正在尝试更改这一点,我认为这就是为什么我在处理如此基本的事情时遇到问题的原因。

我创建了一个名为Calculate 的新NSObject 类,并创建了一个Label 和TextField。我已将标签连接到计算类,作为一个名为“summaryLabel”的插座。

在实现类中,我将标签设置为:

[summaryLabel setStringValue:@"TEST"];

没发生什么事!

我不知道为什么,但就像我说的那样,我正在尝试不同的课程,所以我确定有些东西没有正确连接。有谁有想法吗?

提前谢谢大家。

4

1 回答 1

1

我猜你有两个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)您坚持使用CalculateNIB 中的对象。因此,请删除代码中分配并初始化新代码的部分。相反,只需引用加载 NIB 时创建的现有文件。你需要一个参考。因此,在您的应用程序委托上创建一个插座以指向它并在 NIB 中连接它。

选项 2)您坚持使用Calculate您在代码中创建的对象。所以,从你的NIB中删除一个。您在代码中创建的对象与标签没有连接,因为它不是来自 NIB。因此,您必须在代码中设置与标签的连接,就像您在代码中创建它一样。您需要对标签的引用。您可以将插座添加到应用程序委托并将其连接到标签。然后,您的应用程序委托可以calculateObject.summaryLabel = summaryLabel;告诉Calculate它已创建的对象有关标签的信息。

于 2012-05-09T17:57:59.707 回答