2016-03-25 5 views
0

私は台風を使用してサブタイプUIViewControllerに依存関係を注入しています。 、Typhoon:withFactory:selector:inject styleからの定義にサブクラスプロパティを挿入します。

return TyphoonDefinition.withFactory(self.storyboard(), selector:"instantiateViewControllerWithIdentifier:", parameters: { (method) in 
      method.injectParameterWith("camera-mode-controller") 
     }, configuration: { (definition) in 
      definition.injectProperty("cameraProvider", with: self.systemComponents.systemCameraProvider()) 
    }) 

しかし、UIStoryboard署名func instantiateViewControllerWithIdentifier(identifier: String) -> UIViewControllerは、このファクトリメソッド初期化子がUIViewControllerを作成することを示している:私を「工場」注入法を使用してビューコントローラのインスタンス化を行う必要a different question i hadへの潜在的な解決策が見つけました私のサブクラス(dynamic var cameraProvider)のプロパティを持っていません。したがって、実行時にプロパティの挿入は、setter not foundで失敗します。

"クラスを使って定義を作成:factory:with method:and properties"という方法があるので、定義しているクラスが実際にはUIViewControllerではないことがわかりますが、実際は私の場合、CameraModeViewController: UIViewController?私は、TyphoonDefinition.withParent:class:configuration:TyphoonDefinition.withParent:class:configuration:この効果を生成するwithFactory:selector:parameters:メソッドと連鎖可能性があります参照してくださいAPIドキュメントを掘る?しかし、私の試み:

public dynamic func viewControllerFromID(id: String) -> AnyObject { 
    return TyphoonDefinition.withFactory(self.storyboard(), selector: "instantiateViewControllerWithIdentifier:") { 
     (method) in 
     method.injectParameterWith(id) 
    } 
} 

public dynamic func cameraModeViewController() -> AnyObject { 
    return TyphoonDefinition.withParent(self.viewControllerFromID("camera-mode-controller"), `class`: CameraModeViewController.self) { 
     (definition) in 
     definition.injectProperty("cameraProvider", with: self.systemComponents.systemCameraProvider()) 
    } 
} 

はエラーを生成します:-[TyphoonInjectionByRuntimeArgument forwardingTargetForSelector:]'You can't call a method on the runtime argument being passed in. It has to be passed in as-is'セレクタ引数"length"と。何かご意見は?

答えて

0

バージョンコントロールの問題により、その識別子を持つストーリーボードメンバーはUIViewControllerサブクラスの割り当てを忘れてしまったため、実際にはキャスタブルではなく、そのプロパティはありませんでした。判明したように、TyphoonはView Controllerサブクラスで宣言されたプロパティを注入するだけで正常に動作します。

関連する問題