无法将类型PageViewController的值转换为另一个Controller

时间:2015-12-11 10:17:03

标签: ios swift uipageviewcontroller uistoryboardsegue

你好我有通过segue连接到 UIPageViewController 的ViewController,而且在ViewController中有两个按钮通过segue连接到另一个控制器( LoginSignupViewController )。按钮名称为登录和注册。登录和注册按钮都有不同的segue标识符。单击“登录按钮”或“注册”按钮时出现错误

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if (segue.identifier == "loginSegue") {

        let secondViewController = segue.destinationViewController as! LoginSignupViewController

        secondViewController.navigationTitle = "LOGIN"

    }else if (segue.identifier == "registerSegue") {

        let secondViewController = segue.destinationViewController as! LoginSignupViewController

        secondViewController.navigationTitle = "SIGN UP"
        //etc...
    }

}

如果我使用此代码编译应用程序..我得到了这个

Terminating app due to uncaught exception 'NSInvalidArgumentException' reason: '-[__NSCFType set]: unrecognized selector sent to instance

所以我删除if else条件并使用此代码编译应用程序

let secondViewController = segue.destinationViewController as!   LoginSignupViewController

    secondViewController.navigationTitle = "LOGIN"

我收到此错误

 Could not cast value of type 'Myproject.PageViewController' (0x10008c550) to 'MyProject.LoginSignupViewController' (0x10008c0f0).

当我打印出print(segue.identifier)

它在控制台上打印

Optional("pageViewController")

我的故事板截图

enter image description here

注意:代码在IOS 9或更高版本上运行良好。该应用程序在IOS 8.4上崩溃

3 个答案:

答案 0 :(得分:0)

我看到了你的问题。你应该保持if-else条件。你应该这样做:

1 next置于var stringTitle: String!

2 LoginSignupViewController中的代码更改为:

prepareSegue

3 if (segue.identifier == "loginSegue") { let secondViewController = segue.destinationViewController as! LoginSignupViewController secondViewController.stringTitle = "LOGIN" }else if (segue.identifier == "registerSegue") { let secondViewController = segue.destinationViewController as! LoginSignupViewController secondViewController.stringTitle = "SIGN UP" //etc... } viewDidLoad代码:

LoginSignupViewController

答案 1 :(得分:0)

你确定" loginSegue"指向你的LoginSignupViewController?您的第二个错误表明destinationViewController实际上是PageViewController,并且发生了崩溃,因为您正在强行尝试将其转换为LoginSignupViewController

答案 2 :(得分:0)

我调试代码,我发现应用程序崩溃了,因为在目标控制器的viewdid加载功能中,我添加了一些不适用于IOS 8的代码。我没有费心去调试目标控制器代码,因为错误是模糊的,因为它给我类型转换错误。感谢您的帮助和时间给大家。我正在写这里以防将来有人收到此错误,他也应该检查另一个目标控制器代码。