【问题标题】:Inject dependencies in xib controller在 xib 控制器中注入依赖项
【发布时间】: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 自动实例化。

我尝试过的:

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

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

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

【问题讨论】:

  • 确保控制器已经加载(viewDidLoad)。如果已加载,您可以执行注入依赖项。好像你已经创建了一个控制器,但没有推送到任何控制器。
  • 您是从头开始创建项目的吗?
  • 不,我使用的是 Cocoa App 模板。
  • 哪一个?你添加 MenuBarMenu.xib 了吗?
  • macOS -> Cocoa App -> 使用故事板,使用 coredata,但从那以后我对其进行了大量修改。我现在拥有已添加的 MenuBarMenu.xib 和用于 Windows 的情节提要。故事板以任何方式在 info.plist 中被引用。

标签: swift macos cocoa swinject


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    相关资源
    最近更新 更多