2017-06-09 3 views
1

私は、diffentコントローラから提示したナビゲーションコントローラの中にあり、異なるコンテキストに基づいて異なるコントローラに戻るべきです。Swiftで使用されるObjective-Cで定義されたunwind segueを使用できません

基本的に、segue識別子を実装する人は、おそらくこのフローの戻り点になるはずです。

私はモーダルこの全体の流れを提示する以下のフローを有する:

A(のObjective-C) - > B(のObjective-C) - > C(SWIFT) - > D(SWIFT)

をA、B、Cは同じセグエメソッドを実装しています。

クラスAおよびBのObjective-Cのバージョンを実装する:

- (IBAction)unwindToRootTabBarViewController:(UIStoryboardSegue *)unwindSegue {} 

クラスCは、スイフトバージョンをimplemntsつつ:

override func canPerformUnwindSegueAction(_ action: Selector, from fromViewController: UIViewController, withSender sender: Any) -> Bool { 
     return true 
} 

@IBAction public func unwindToRootTabBarViewController(segue: UIStoryboardSegue) {} 

目的で記述されているCクラスにリラックスしようとしています私は方法が見つかっていないので、それはクラッシュしました。

**キャッチされていないexceptio N 'NSInvalidArgumentException'、理由: ' - [App.ClassCViewController unwindToRootTabBarViewController:]:認識されていないセレクタが インスタンス0x7ff035c634b0に送られた'

すべてのアイデアは、なぜこれが起こってかもしれませんか?

答えて

1

私はそれを少し考えを与えたからメソッドへのパラメータの型を変更:

@IBAction public func unwindToRootTabBarViewController(_: UIStoryboardSegue){} 

@IBAction public func unwindToRootTabBarViewController(segue: UIStoryboardSegue){} 

そして、それは働きました!

SwiftとObjective-Cがメソッドシグネチャを処理する方法と関係があると思います。

関連する問題