我有一个应用程序,打算在单击按钮时创建一个弹出窗口。弹出窗口将从 nib 文件加载。因此,单击按钮,窗口就会愉快地弹出。但是,它的 awakeFromNib 方法被调用两次。这是代码;
应用程序委托(delegate):
...
-(IBAction)myButton:(id)sender{
printf("[settings]: button pressed\n");
Config_SelectorSetup *selectorSetup = [[Config_SelectorSetup alloc] initWithWindowNibName:@"Config_SelectorSetup"];
printf("about to load\n");
[[selectorSetup window] makeKeyAndOrderFront:sender];
}
Config_SelectorSetup.m
- (id) initWithWindowNibName:(NSString *)windowNibName{
printf("[initWithWindowNibName]\n");
if( self = [super initWithWindowNibName:windowNibName] ){
...
}
return self;
}
- (void)awakeFromNib{
printf("[awakeFromNib]\n");
[self startScreen];
}
这是输出:
[settings]: button pressed
[initWithWindowNibName]
about to load
[awakeFromNib]
[awakeFromNib]
分析调用堆栈,第一次由 [NSObject PerformSelector:]
调用,第二次由 [NSIBObjectData nibInstantiateWithOwner:topLevelObjects:]
调用。
有人能告诉我我做错了什么吗?
谢谢
最佳答案
除了文件所有者之外,Config_SelectorSetup.xib
是否还包含 Config_SelectorSetup
对象?
尝试在 awakeFromNib
中记录 self
-
NSLog(@"self = %p", self);
每次都打印相同的地址吗?如果它打印不同的地址,则您的 Nib 中可能有一个 Config_SelectorSetup
对象。
关于objective-c - NSWindowController awakeFromNib 被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9287451/