我想了解为什么如果我尝试在init方法中为一个对象(如NSButton)设置值(即enAlValue或setTitle)没有任何反应,但是如果我在awakeFromNib中调用setter函数它可以正常工作。
@interface appController : NSObject {
NSButton *btn;
}
@end;
@implementation appController
-(void)awakeFromNib {
//it works
[btn setTitle:@"My title"];
}
-(id)init {
self = [super init];
if(self){
//it doesn't works
[btn setTitle:@"My title"];
}
}
@end
答案 0 :(得分:41)
在 -init
之后设置 -awakeFromNib
之前设置。如果您想要访问网点,则需要在-awakeFromNib
或其他设置出口后执行的方法(例如-[NSWindowController windowDidLoad]
)。
加载nib文件时:
-init
,-initWithFrame:
或-initWithCoder:
-awakeFromNib
被发送到接口对象,文件所有者和代理对象。您可以在Resource Programming Guide中了解有关nib加载过程的更多信息。
答案 1 :(得分:5)
在初始化时,视图将无法正确设置,并且插座未连接。这就是你在这种情况下使用awakeFromNib:
的原因 - 所有内容都已设置好并可以使用。