你好我有通过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")
我的故事板截图
注意:代码在IOS 9或更高版本上运行良好。该应用程序在IOS 8.4上崩溃
答案 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的代码。我没有费心去调试目标控制器代码,因为错误是模糊的,因为它给我类型转换错误。感谢您的帮助和时间给大家。我正在写这里以防将来有人收到此错误,他也应该检查另一个目标控制器代码。