【问题标题】:unrecognized selector sent to instance in swift快速发送到实例的无法识别的选择器
【发布时间】:2014-09-23 13:42:34
【问题描述】:

我在代码中使用从一个视图控制器到另一个视图控制器的转场,它们都嵌入在导航控制器中,转场是“显示”。

这就是我所说的segue:

        performSegueWithIdentifier("LogIn", sender: self)

这就是我所做的:

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "LogIn"  {
            segue.destinationViewController.setShowsCancelButton(false, animated: false)
        }

    }

一旦触发 segue,我就会在 Xcode 中得到一个错误:

[Chooze.LogInOrRegisterViewController setShowsCancelButton:animated:]: unrecognized selector sent to instance 0x7f928b93aed0
2014-09-23 16:40:04.608 Chooze[9935:939290] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Chooze.LogInOrRegisterViewController setShowsCancelButton:animated:]: unrecognized selector sent to instance 0x7f928b93aed0'

【问题讨论】:

    标签: ios objective-c iphone xcode swift


    【解决方案1】:

    由于目标视图控制器嵌入在导航控制器中,您的代码试图在导航控制器上调用setShowsCancelButton。相反,您应该访问导航控制器的topViewController 属性,并在它返回的对象上调用setShowsCancelButton,例如:

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!)
    {
        if segue.identifier == "Login" {
            let navController = segue.destinationViewController as UINavigationController
            let controller = navController.topViewController as LoginOrRegisterViewController
            controller.setShowsCancelButton(false, animated: false)
        }
    }
    

    【讨论】:

    • 在这一行 controller.setShowsCancelButton(false, animated: false) 我收到以下错误:“LogInOrRegisterViewController 没有名为 setShowsCancelButton的成员
    • 那你为什么要调用那个方法呢?您还没有为该类发布任何代码,因此无法猜测它的作用。
    • 我在objective-c中使用了相同的方法,我只是想在swift中写完全一样的,这是在objective-c中[(segue.destinationViewController) setShouldHideBackButton:YES];
    • 那不就是controller.shouldHideBackButton = true吗? setShowsCancelButton 来自哪里?请发布代码,而不是把它变成一个冗长、无聊的评论线程。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 2012-07-24
    相关资源
    最近更新 更多