【问题标题】:Could not cast value of type PageViewController to another Controller无法将 PageViewController 类型的值转换为另一个控制器
【发布时间】:2015-12-11 10:17:03
【问题描述】:

你好,我有 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 上崩溃

【问题讨论】:

    标签: ios swift uipageviewcontroller uistoryboardsegue


    【解决方案1】:

    我看到了你的问题。您应该保持 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...
    }
    

    3viewDidLoadLoginSignupViewController 中放入代码:

    self.navigationItem.title = "LOGIN"
    

    【讨论】:

    • @hellosheikh 仍然崩溃?
    • 是的.. 代码在 IOS 9 上运行良好.. 它在 ios 8.4 中崩溃了
    • @hellosheikh secondViewController.navigationTitle 怎么样?
    • 抱歉我没接你?
    • 我的意思是navigationTitle是个什么样的人
    【解决方案2】:

    你确定“loginSegue”指向你的LoginSignupViewController吗?您的第二个错误表明destinationViewController 实际上是PageViewController,并且发生崩溃是因为您正试图将其强制转换为LoginSignupViewController

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2022-08-18
        • 1970-01-01
        • 2017-01-10
        • 2021-03-08
        • 2011-04-10
        • 1970-01-01
        • 1970-01-01
        • 2019-06-05
        • 2017-05-10
        相关资源
        最近更新 更多