2015-01-14 2 views
0

Я новичок в программировании какао.initWithWindow: в оконном контроллере не назовешь

В Xcode 6.1 я создал приложение OS X с помощью раскадровки. В Outline есть оконный контроллер. Я изменил свой класс в «Identity Inspector» на индивидуальный подкласс NSWindowController, который называется WindowController.

Я написал следующий код в @implementation из WindowController:

- (instancetype)initWithWindow:(NSWindow *) window { 
    NSLog(@"window"); 
    window.titleVisibility = NSWindowTitleHidden; 
    return [super initWithWindow:window]; 
} 

Но выход панель ничего не показывает.

если я переопределить метод windowDidLoad в классе,

- (void)windowDidLoad { 
    [super windowDidLoad]; 
    self.window.titleVisibility = NSWindowTitleHidden; 
    NSLog("@Cool..."); 
} 

сообщение показывает вверх.

doc of NSWindowController говорит, что -initWithWindow: - назначенный Инициаллер класса. Как его можно пропустить?

В How Window Controllers Work section of Window Programming Guide, он говорит:

Для простых документов, то есть документов только один СИБ файл, содержащий окно, вам нужно сделать немного непосредственно NSWindowController объектов. AppKit создает один для вас. Однако, если оконного контроллера по умолчанию недостаточно, вы можете создать собственный подкласс NSWindowController.

Именно это я и делаю. Но я не знаю, чего мне здесь не хватает.

Спасибо!

+1

может иметь отношение к использованию раскадровки, как вы устанавливаете/создаете оконный контроллер? Только в раскадровке или в коде? – Volker

+0

Hi, @Volker. Спасибо за ваш ответ. Я просто использую раскадровку. Я не понимаю, почему 'initWithWindow:' был обойден. – LShi

ответ

0

Насколько я знаю, вы должны сначала вызвать super с initWithWindow, а затем установить заголовок. В противном случае вызов super инициализирует окно без предыдущих настроек. Когда вы переопределяете метод windowDidLoad, вы устанавливаете видимость заголовка после инициализации, и все в порядке.

+0

Спасибо :-) Но 'NSLog', добавленный в' initWithWindow: ', не вступает в силу. Это означает, что «initWithWindow:» пропущен? Наверное, здесь есть какая-то магия. Если это пропущено здесь, значит ли это, что мы не должны переопределять 'initWithWindow:' и должны писать код инициализации в 'windowDidLoad'? И я просто прочитал [Было бы правильно/ellegant использовать только alloc без init?] (Http://stackoverflow.com/questions/4085968/would-it-be-correct-ellegant-use-only-alloc-without-init) и подумал, что его нельзя пропустить. – LShi

Смежные вопросы