Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 奇怪的NSLog行为:NSLog显示窗口控制器';窗户_Objective C_Macos_Cocoa_Nslog_Nswindowcontroller - Fatal编程技术网

Objective c 奇怪的NSLog行为:NSLog显示窗口控制器';窗户

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)

我不明白这里发生了什么。我有一个按钮连接到AppDelegate中的以下操作:

- (IBAction)openWindow:(id)sender {
    self.winCon = [[NSWindowController alloc] initWithWindowNibName:@"NewWindow"];
}
单击按钮时不会发生任何事情(如预期),但当我将代码更改为(add
NSLog()

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];
}