У Wevah есть правильная идея, хотя я попытаюсь немного расширить ее.
Если бы вы попытались добавить эту строку в ваш initWithWindowNibName:
метод:
NSLog(@"window == %@", [self window]);
Скорее всего, вы увидите следующий вывод на консоль:
window == (null)
Другими словами, окно по-прежнему nil
, так как init*
методы находятся на столь раннем этапе жизни объекта, что многие IBOutlet
s или элементы пользовательского интерфейса еще не совсем «подключены».
Отправка сообщения на nil
совершенно нормально: его просто игнорируют.Таким образом, в основном ваша попытка позиционирования окна не имеет никакого эффекта, потому что она в основном равняется [nil doSomething]
;
Ключом является то, чтобы выполнить позиционирование окна позже во время жизни объекта контроллера, где IBOutlet
s и другие объекты пользовательского интерфейса правильно подключены.Как упоминал Вева, одним из таких методов, где все правильно подключено, является
- (void)awakeFromNib;
или, в случае NSWindowController
, следующий метод:
- (void)windowDidLoad;
Надеюсь, этопомогает ...