Objective c 奇怪的NSLog行为:NSLog显示窗口控制器';窗户
我不明白这里发生了什么。我有一个按钮连接到AppDelegate中的以下操作:Objective c 奇怪的NSLog行为:NSLog显示窗口控制器';窗户,objective-c,macos,cocoa,nslog,nswindowcontroller,Objective C,Macos,Cocoa,Nslog,Nswindowcontroller,我不明白这里发生了什么。我有一个按钮连接到AppDelegate中的以下操作: - (IBAction)openWindow:(id)sender { self.winCon = [[NSWindowController alloc] initWithWindowNibName:@"NewWindow"]; } 单击按钮时不会发生任何事情(如预期),但当我将代码更改为(addNSLog()) A弹出“新窗口”窗口。为什么会发生这种情况? 此外,NSLog还会在控制台中打印(null)
- (IBAction)openWindow:(id)sender {
self.winCon = [[NSWindowController alloc] initWithWindowNibName:@"NewWindow"];
}
单击按钮时不会发生任何事情(如预期),但当我将代码更改为(addNSLog()
)
A弹出“新窗口”窗口。为什么会发生这种情况?
此外,NSLog还会在控制台中打印(null)
(在“NewWindow”xib中,文件的所有者是NSObject,我还没有连接窗口引用。因此我希望日志打印null
,但显示的窗口令人惊讶)
另一件事,当我使用:
- (IBAction)openWindow:(id)sender {
[NSBundle loadNibNamed:@"NewWindow" owner:self.winCon];
}
单击该按钮,将显示窗口。为什么会发生这种情况未加载nib并显示窗口分隔的进程。我是否应该调用showWindow:
或MakeKeyandDerfront:
来显示窗口?
当我在中阅读一篇特定的苹果文档时:
打开一个窗口,也就是说,使窗口可见通常是
通过将窗口放入应用程序的窗口列表来完成
通过调用MakeKeyandDerFront:,orderFront:,方法之一,
等等,在窗口中,等等另外,在设置了某些位的情况下
界面生成器,加载nib文件时将显示该窗口
一些案例。
我想这就是loadNibNamed:..
打开窗口的原因。但这些“接口生成器中设置的位”是什么呢。我在哪里可以得到这方面的信息?(在上述情况下,当我取消选中窗口的'visible at launch'属性时,我还可以阻止窗口打开-如果能对该属性的功能进行更多解释,会有所帮助。)谢谢
注意:我知道如何使用NSWindowController子类初始化nib,并在xib中进行正确的布线,但我只是对上述行为感到好奇。要回答您的第一个问题,请在编写
NSLog(@“%@”,self.winCon.window)时回答代码>您实际上是向窗口控制器实例winCon
发送一条消息以显示其窗口,然后向其发送一条附加的说明
消息以输出将在控制台中显示的字符串。使用正常的消息传递语法(非点表示法)编写,并在格式字符串中使用“%s”,您可以执行以下操作:NSLog(@“%s”,[[[self winCon]window]description]
。根据,window方法将返回窗口实例,并尝试加载尚未显示的窗口
loadNibNamed:owner:
NSBundle方法仅在您不使用窗口控制器时使用。加载nib文件和显示窗口是两个独立的操作。如果您还没有这样做,您应该阅读文件所有者占位符以及如何将xib文件归档到nib文件中。也就是说,您的showWindo方法应该如下所示(尽管您确实应该将NSWindowController子类化,并且已经对其进行了初始化-如果没有意义,请告诉我):
感谢您提供有关窗口方法的信息,但是加载窗口和显示窗口是不同的,对吗?还有为什么日志状态返回null。关于loadNibNamed:owner:加载nib和显示窗口是单独的操作这一事实是我怀疑的原因。为什么要调用loadNibNamed:owner:
显示窗口。我将为问题添加更多详细信息以使其更清楚。在文档中,它全部加载窗口,但没有说明如何显示窗口。
- (IBAction)openWindow:(id)sender {
[NSBundle loadNibNamed:@"NewWindow" owner:self.winCon];
}
- (IBAction)openWindow:(id)sender {
self.winCon = [[NSWindowController alloc] initWithWindowNibName:@"NewWindow"];
[self.winCon showWindow];
}