NSWindowController awakeFromNib被调用两次
问题描述:
我有打算在单击按钮时创建一个弹出窗口的应用程序。弹出窗口将从一个nib文件加载。所以,按钮被点击并且窗口愉快地弹出。但是,它的awakeFromNib方法被调用两次。这是代码;NSWindowController awakeFromNib被调用两次
应用程序委托:
...
-(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
对象?
尝试登录self
在awakeFromNib
-
NSLog(@"self = %p", self);
是否每次打印相同的地址?如果它打印的是不同的地址,那么很有可能你的笔尖上有一个Config_SelectorSetup
对象。
答
多少网点,你在你的类和什么是类的子类?我发现与某些亚型(NSDocument
为例),如果你有多个网点连接,每个笔尖对象将射击在加载awakeFromNib
方法。 NSLog
你的网点,看他们是否输出无或地址。
如果你有同样的问题,但该地址是相同的??? – trumpetlicks 2017-06-23 19:38:51
然后,你应该打开一个新的问题与相关的细节。 – 2017-06-23 20:22:48