我有以下代码:
@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?
答案 0 :(得分:4)
众所周知KVC问题。
当Cocoa加载您的NIB以连接IB中设计的插座连接时,它将寻找setter。 因此,它在加载时使用NSTextField *对象调用 setText:。 由于您的代码尚未准备好接受不同类型的对象...首先用于配置插座,其次用于设置其内部文本值...您的插座将保持等于 nil 。
所有对nil的调用 - 什么都不做。
解决方法:重命名出口变量名称或将setter / getter方法重命名为与KVC表示法不同...
答案 1 :(得分:1)
为了避免烦人的,明显的反应,你确定你已经在Interface Builder中连接了这个IBOutlet吗?你什么时候设置文本行 - 你是在-awakeFromNib吗?