NSViewController IBOutlet всегда равен нулю

У меня есть приложение Cocoa с основным NSWindowController и внутри NSView, подключенным к объекту NSViewController следующим образом:

введите здесь описание изображения

CloudCardsViewController — это NSViewController со своими Nib и IBOutlet до NSStackView. Когда я пытаюсь получить доступ к розетке, приложение вылетает и показывает эту ошибку в консоли:

неустранимая ошибка: неожиданно найдено nil при распаковке необязательного значения 2017-09-16 19:46:43.756852+0200 AppName[3402:150754] неустранимая ошибка: неожиданно обнаружено nil при распаковке необязательного значения

Если я добавлю NSViewController по коду, работает нормально...

Вот код: введите здесь описание изображения

Если я напечатаю baseStackView, результат будет nil

Есть идеи? Спасибо!


person mhergon    schedule 16.09.2017    source источник
comment
Я добавил код @matt   -  person mhergon    schedule 16.09.2017
comment
Я помещаю NSView в окно, после этого я перетаскиваю NSViewController в xib, назначаю CloudCardsViewController и подключаю NSView к представлению CloudCardsViewController. Могу ли я загрузить весь код? Спасибо @matt   -  person mhergon    schedule 16.09.2017
comment
Где находится ваш NSStackView в вашем XIB? Я вижу только NSView   -  person Jonas    schedule 16.09.2017
comment
NSStackView находится в CloudCardsViewController. Выход указывает на контроллер   -  person mhergon    schedule 16.09.2017
comment
Если вы хотите загрузить свой код на github, и я могу проверить   -  person Jonas    schedule 16.09.2017


Ответы (1)


Проблема с вашим кодом заключается в том, что вы только загружаете MainWindowController из файла XIB. Инициализируется MainWindowController, а с ним только подключенный XIB из CloudCardsViewontroler. Но ваш CloudCardsViewController никогда не инициализировался сам для себя. Вы не можете использовать свой CloudCardsViewController таким образом. Вам нужно инициализировать его, а затем добавить в свой MainWindowController.

Вы создали экземпляр своего класса непосредственно с помощью инициализатора. Розетки так не соединятся. Интерфейсный построитель создает настраиваемые экземпляры ваших классов и кодирует эти экземпляры в NIB и раскадровки для повторного декодирования, он не определяет сами классы.

person Jonas    schedule 16.09.2017
comment
Можете ли вы предоставить мне пример кода на github? Спасибо! - person mhergon; 16.09.2017
comment
Просто просмотрите все учебники в Интернете о том, как использовать и инициализировать контроллеры просмотра. - person Jonas; 16.09.2017