0

我正在开发一个仅包含菜单栏图标的 macOS 应用程序。

我有一个带有菜单的 xib 文件(MenuBarMenu.xib)和一个相应的控制器(MenuBarMenuController.swift),它把它放在菜单栏中。

在此处输入图像描述

我想手动或使用 Swinject 在此控制器中注入依赖项。

所以要做到这一点,我想我可以从 AppDelegate 以编程方式加载 xib 文件:

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

但看起来控制器在到达 applicationDidFinishLaunching 之前由 NSApplication 自动实例化。

我试过的:

  1. 从 info.plist 中删除 NSMainNibFile
  2. 从 info.plist 中删除 NSMainStoryboardFile
  3. 清除项目设置中的主界面设置
  4. 添加了 LSUIElement = 是
  5. 使用自定义 main.swift确保调用了我的 AppDelegate。

如果存在 xib 文件,则在 AppDelegate 之前调用它。当我删除它时,没有运行时错误。

我的问题是:如何在此控制器中注入依赖项?

4

1 回答 1

0

虽然我不知道如何在我的特定场景中注入依赖项,但我能够通过使用故事板而不是 xib 文件来解决它。然后在 SwinjectStoryboard 的帮助下,我可以进行注射。

于 2019-04-13T09:19:17.013 回答