我是新开发者,我正在努力使用我的应用程序的Walkthrough屏幕。 我创建了它,但当我点击继续我的主屏幕时,应用程序崩溃了。 这是我在"继续"下面的代码。按钮:
@IBAction func skipButtonTapped(_ sender: AnyObject) {
let nextView: FirstViewController = self.storyboard?.instantiateViewController(withIdentifier: "FirstViewController") as! FirstViewController
let appdelegate = UIApplication.shared.delegate as! AppDelegate
appdelegate.window!.rootViewController = nextView
}
我得到的错误是:
Could not cast value of type 'UITabBarController' (0x19f33c0d8) to 'Iwin.FirstViewController' (0x100057220).
我认为问题出在标识符名称的名称中,在我的例子中是#34; FirstViewController"
这是我的TabBarController的故事板ID,它应该是我应用的第一个屏幕。
附上我也上传了一张照片。
答案 0 :(得分:1)
您看到的错误可能与您在函数第一行上执行的强制转换(as!
)有关。你正在做以下事情:
instantiateViewController(withIdentifier:)
,Apple API文档说明返回UIViewController
(在这种情况下,它返回UITabBarController
,一个子类)UITabBarController
到FirstViewController
,失败。这是因为强制转换可以保证结果值不是nil
,但不能保证它不会失败(崩溃)。 UITabBarController
根本不可兑换,因为它不会扩展/实施FirstViewController
。
我的猜测是,即使你已经为该视图控制器提供了标识符 "FirstViewController"
,但它只是一个普通的旧UITabBarController
。在Interface Builder中仔细检查此View Controller实际上是FirstViewController
类的实例。
查看您的照片,“类”字段的默认值为UITabBarController
- 这应该是您尝试更改的第一件事。填写FirstViewController
,告诉我它是否有效。