【发布时间】:2019-04-12 09:38:51
【问题描述】:
我正在开发一个仅包含菜单栏图标的 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 自动实例化。
我尝试过的:
- 从 info.plist 中删除了 NSMainNibFile
- 从 info.plist 中删除了 NSMainStoryboardFile
- 清除项目设置中的主界面设置
- 添加了 LSUIElement = 是
- 使用 custom main.swift 确保调用了我的 AppDelegate。
如果存在 xib 文件,则在 AppDelegate 之前调用它。当我删除它时,没有运行时错误。
我的问题是:如何在这个控制器中注入依赖项?
【问题讨论】:
-
确保控制器已经加载(viewDidLoad)。如果已加载,您可以执行注入依赖项。好像你已经创建了一个控制器,但没有推送到任何控制器。
-
您是从头开始创建项目的吗?
-
不,我使用的是 Cocoa App 模板。
-
哪一个?你添加 MenuBarMenu.xib 了吗?
-
macOS -> Cocoa App -> 使用故事板,使用 coredata,但从那以后我对其进行了大量修改。我现在拥有已添加的 MenuBarMenu.xib 和用于 Windows 的情节提要。故事板以任何方式在 info.plist 中被引用。
标签: swift macos cocoa swinject