无法将类型 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 条件。你应该这样做:
1 把 var stringTitle: String!
放到 LoginSignupViewController
2 将 prepareSegue
中的代码更改为:
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...
}
3 在 LoginSignupViewController
的 viewDidLoad
中输入代码:
self.navigationItem.title = "LOGIN"
您确定 "loginSegue" 指向您的 LoginSignupViewController
吗?您的第二个错误表明 destinationViewController
实际上是一个 PageViewController
,并且发生崩溃是因为您强行尝试将其转换为 LoginSignupViewController
.
我调试了代码,发现应用程序崩溃了,因为在目标控制器的 viewdid 加载函数中,我添加了一些不适用于 IOS 8 的代码。我没有费心调试目标控制器代码,因为错误是模棱两可的,因为它给我类型转换错误。感谢大家的帮助和时间。我写在这里是为了防止将来有人遇到这个错误,他也应该检查另一个目标控制器代码。
你好我有 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 条件。你应该这样做:
1 把 var stringTitle: String!
放到 LoginSignupViewController
2 将 prepareSegue
中的代码更改为:
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...
}
3 在 LoginSignupViewController
的 viewDidLoad
中输入代码:
self.navigationItem.title = "LOGIN"
您确定 "loginSegue" 指向您的 LoginSignupViewController
吗?您的第二个错误表明 destinationViewController
实际上是一个 PageViewController
,并且发生崩溃是因为您强行尝试将其转换为 LoginSignupViewController
.
我调试了代码,发现应用程序崩溃了,因为在目标控制器的 viewdid 加载函数中,我添加了一些不适用于 IOS 8 的代码。我没有费心调试目标控制器代码,因为错误是模棱两可的,因为它给我类型转换错误。感谢大家的帮助和时间。我写在这里是为了防止将来有人遇到这个错误,他也应该检查另一个目标控制器代码。