为什么我的一个文本字段的值会发生变化?

时间:2009-12-28 22:11:02

标签: objective-c cocoa nstextfield

我有以下代码:

@interface AXWindowController : NSWindowController {
IBOutlet NSTextField *text;
IBOutlet NSTextField *otherText;
}

- (void) setText: (NSString *)input;
- (void) setOtherText;

@end

@implementation AXWindowController

- (void) setText: (NSString *)input
{
    [text setStringValue:input];
}

- (void) setOtherText
{
    [otherText setStringValue:@"nag"];
}

@end

当我跑步时:

1. [controller showWindow:nil];
2. [controller setText:@"lol"];
3. [controller setOtherText];

第3行正确执行,但第2行什么都不做。事实上,当我在执行第2行和第3行时在gdb中查看text和otherText时,我得到以下结果:

(gdb) p text
$1 = (NSTextField *) 0x0
(gdb) p otherText
$2 = (NSTextField *) 0x1385d1e0

发生了什么事?我无法将输入变量传递给NSTextField的set函数?当我更改set函数的参数时,为什么我的NSTextField变为null?

2 个答案:

答案 0 :(得分:4)

众所周知KVC问题。

当Cocoa加载您的NIB以连接IB中设计的插座连接时,它将寻找setter。 因此,它在加载时使用NSTextField *对象调用 setText:。 由于您的代码尚未准备好接受不同类型的对象...首先用于配置插座,其次用于设置其内部文本值...您的插座将保持等于 nil

所有对nil的调用 - 什么都不做。

解决方法:重命名出口变量名称或将setter / getter方法重命名为与KVC表示法不同...

答案 1 :(得分:1)

为了避免烦人的,明显的反应,你确定你已经在Interface Builder中连接了这个IBOutlet吗?你什么时候设置文本行 - 你是在-awakeFromNib吗?