Внедрить зависимости в контроллере xib - PullRequest
0 голосов
/ 12 апреля 2019

Я разрабатываю приложение macOS, которое состоит только из значка строки меню.

У меня есть файл xib (MenuBarMenu.xib) с меню и соответствующий контроллер (MenuBarMenuController.swift), который помещает его в строку меню.

enter image description here

Я хочу внедрить зависимости в этот контроллер, либо вручную, либо с помощью Swinject.

Итак, для этого я подумал, что могу загрузить файл xib программно из AppDelegate:

 func applicationDidFinishLaunching(_ aNotification: Notification) {
        let controller = MenuBarMenuController(nibName: "MenuBarMenu", bundle: nil)
        controller.someDependency = Test()
 }

Но похоже, что NSApplication автоматически создает экземпляр контроллера до достижения applicationDidFinishLaunching.

Что я пробовал:

  1. Удален NSMainNibFile из info.plist
  2. Удален NSMainStoryboardFile из info.plist
  3. Сброс настроек основного интерфейса в настройках проекта
  4. Добавлен LSUIElement = да
  5. Используется custom main.swift , чтобы убедиться, что мой AppDelegate вызывается.

Если xib-файл существует, он вызывается перед AppDelegate. Когда я его удаляю, ошибок времени выполнения нет.

Мой вопрос: как я могу ввести зависимость в этот контроллер?

1 Ответ

0 голосов
/ 13 апреля 2019

Хотя я не понимал, как внедрить зависимость в моем конкретном сценарии, я смог обойти ее, используя раскадровку вместо файла XIB.Затем с помощью SwinjectStoryboard я могу сделать инъекцию.

...