Typhoon:从故事板OS X中注入控制器

时间:2015-12-17 13:14:26

标签: swift macos dependency-injection typhoon

我在Xcode(OS X,Swift,Storyboards)中有一个干净的OS X项目。 Info.plist具有以下配置

enter image description here

以下是MyAssembly.sift

中视图控制器的配置
public dynamic func viewController() -> AnyObject {
    return TyphoonDefinition.withClass(ViewController.self){
        (definition: TyphoonDefinition!) in
            definition.injectProperty("name", with: "TEST INJECTED")
    }
}

这是我的ViewController.swift

import Cocoa

@objc
class ViewController: NSViewController {
    var name:String?
}

我在视图上添加了NSTextField,并将其值绑定到ViewController的name属性。

根据文档它应该有效,但它没有。

当我在AppDelegate.applicationDidFinishLaunching方法中尝试print(NSStoryboard(name: "Main", bundle: NSBundle.mainBundle()))时,它打印为<NSStoryboard: 0x600000001280>,因此,它不是TyphoonStoryboard实例。

如果我将typhoonKey添加到ViewController上的用户定义的运行时属性,就像这样

enter image description here

错误消息&#34;无法设置(typhoonKey)用户定义的检查属性(Typhon_Test_Delete.ViewController):[setValue:forUndefinedKey:]:此类不是密钥typhoonKey的密钥值编码兼容。& #34;得到印刷。

任何想法我做错了什么?

可能是Typhoon正在寻找UIMainStoryboardFile,但在这种情况下我们有NSMainStoryboardFile

2 个答案:

答案 0 :(得分:1)

你是对的Typhoon目前还没有提供OSX故事板集成,只有iOS。在iOS上,Typhoon:

  • 在启动时检查应用程序中的TyphoonConfig。如果找到,以及故事板详细信息(UIMainStoryboardFile),那么它将检测应用程序以确保此故事板是TyphoonStoryboard的实例。

这项OSX支持已开始工作,但由于需求不足而无法完成。完成此任务不是一项重大任务。

与此同时,您可以:

  • 手动创建TyphoonStoryboard的实例并使用它。
  • 实例化后调用[factory inject:controller]

答案 1 :(得分:0)

台风问题“在OSX上支持NSStoryboard” https://github.com/appsquickly/Typhoon/issues/558