ios - 不能使用在 Swift 中使用的 Objective-C 中定义的 unwind segue

标签 ios objective-c iphone xcode unwind-segue

我有一个模态视图 Controller ,它位于我从不同 Controller 呈现的导航 Controller 内,并且基于不同的上下文,它应该返回到不同的 Controller 。

基本上,无论谁实现了 segue 标识符,都应该是此流程的返回点。

我有以下流程以模态方式呈现整个流程:

A( objective-C )-> B( objective-C )-> C(Swift)-> D(Swift)

A、B、C实现了相同的segue方法。

A 类和 B 类实现了 Objective-C 版本:

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

虽然 C 类实现了 Swift 版本:

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

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

当试图展开到用 Objective-C 编写的 C 类时,它崩溃了,因为我找不到该方法,即使它在那里:

** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[App.ClassCViewController unwindToRootTabBarViewController:]: unrecognized selector sent to instance 0x7ff035c634b0'

知道为什么会发生这种情况吗?

最佳答案

我想了想,将参数类型更改为方法:

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

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

成功了!

我认为这与 Swift 和 Objective-C 处理方法签名的方式有关。

关于ios - 不能使用在 Swift 中使用的 Objective-C 中定义的 unwind segue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44461392/

相关文章:

iphone - 如何在 iOS 中发送 Get 请求?

ios - clang 仅针对 iOS 设备目标失败,退出代码为 254

iphone - 是否可以判断一个应用程序被打开了多少次?

ios - 如何限制按钮点击

ios - 在 block 中强烈捕获属性,正在将应用程序非弧形转换为弧形

ios - 如何让 "legally"淡出应用程序中的导航栏?

ios - 当键盘中的 "Next"返回按钮时滚动带有文本字段的 TableView

ios - 解析 : How to know whether a image file has been cached using PFImageView?

ios - NSUserDefaults 在特定时间后清除其值

ios - 为什么我可以在 applicationWillTerminate 中运行一段时间(真)?