2010-09-29 66 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; 

希望這有助於...