2010-09-29 63 views
3

我有一个扩展NSWindowController的类,我试图定位它控制的窗口。该窗口正确显示所有预期的内容和功能,但是当我尝试将其起始位置放在initWithWindowNibName方法的屏幕上时,位置不会改变。这里是代码:无法设置NSWindow的位置

NSPoint p = NSMakePoint(100, 50); 
[[self window] setFrameTopLeftPoint:p]; 

这似乎很直接,我不知道问题是什么。

感谢您的任何想法。

(发现这个问题。我没有窗户有线高达IB类)。

+0

声明和一行代码是不够的。如果我将该代码复制并粘贴到我的程序中,它将起作用,这意味着我无法重现您的错误。 – Chuck 2010-09-29 23:31:45

回答

1

尝试把这些代码在awakeFromNib

3

Wevah看法是正确的,但我会尽力就可以扩大一点。

如果你尝试加入这一行到您的initWithWindowNibName:方法:

NSLog(@"window == %@", [self window]); 

您可能会看到下面的输出到控制台:

window == (null) 

换句话说,窗口依然是nil ,因为init*方法在对象的生命周期中如此早,所以许多IBOutlet或用户界面项目还没有完全“连接”。

一封邮件发送给nil是完全没有问题的:它简单地忽略。所以,基本上你试图定位窗户没有效果,因为它基本上等于[nil doSomething];

接下来的关键是在控制器对象的生命周期中稍后执行窗口的定位,其中IBOutlet和其他用户界面对象已正确挂接。至于Wevah提到,这里的东西都是正确迷上了一个这样的方法

- (void)awakeFromNib; 

或在NSWindowController的情况下,下面的一个,以及:

- (void)windowDidLoad; 

希望这有助于...