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对象?

尝试登录selfawakeFromNib -

NSLog(@"self = %p", self); 

是否每次打印相同的地址?如果它打印的是不同的地址,那么很有可能你的笔尖上有一个Config_SelectorSetup对象。

+0

如果你有同样的问题,但该地址是相同的??? – trumpetlicks 2017-06-23 19:38:51

+0

然后,你应该打开一个新的问题与相关的细节。 – 2017-06-23 20:22:48

多少网点,你在你的类和什么是类的子类?我发现与某些亚型(NSDocument为例),如果你有多个网点连接,每个笔尖对象将射击在加载awakeFromNib方法。 NSLog你的网点,看他们是否输出无或地址。