3

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

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

这看起来很简单,我不确定问题是什么。

感谢您的任何想法。

(发现问题。我没有将窗口连接到 IB 中的类。)

4

2 回答 2

3

Wevah 的想法是正确的,但我会尝试对其进行扩展。

如果您要尝试将此行添加到您的initWithWindowNibName:方法中:

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

您可能会在控制台看到以下输出:

window == (null)

换句话说,窗口仍然是nil,因为init*方法在对象的生命周期中太早了,以至于许多IBOutlets 或用户界面项还没有完全“连接”起来。

发送消息nil完全没问题:它只是被忽略了。所以,基本上你尝试定位窗口没有效果,因为它基本上等同于[nil doSomething];

然后关键是在控制器对象的生命周期中稍后执行窗口的定位,其中IBOutlets 和其他用户界面对象正确连接。正如 Wevah 所暗示的,其中一种正确连接事物的方法是

- (void)awakeFromNib;

或者在 的情况下NSWindowController,还有以下一个:

- (void)windowDidLoad;

希望这可以帮助...

于 2010-09-30T04:35:00.507 回答
1

尝试将该代码放入awakeFromNib.

于 2010-09-30T00:21:05.830 回答