无法将类型 PageViewController 的值转换为另一个控制器

Could not cast value of type PageViewController to another Controller

你好我有 ViewController 通过 segue 连接到 UIPageViewController 并且在 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")

我的故事板截图

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

崩溃

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

1var stringTitle: String! 放到 LoginSignupViewController

2prepareSegue 中的代码更改为:

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...
}

3LoginSignupViewControllerviewDidLoad 中输入代码:

self.navigationItem.title = "LOGIN"

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

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