无法将“UIView”类型的值转换为“SKView”
Posted
技术标签:
【中文标题】无法将“UIView”类型的值转换为“SKView”【英文标题】:Could not cast value of type 'UIView' to 'SKView' 【发布时间】:2015-10-07 22:41:10 【问题描述】:我有两个视图控制器,一个是GameViewController(这个是我在开始一个新游戏项目时由xcode创建的)和MenuViewController。最后一个为用户提供了一个“开始游戏”按钮。按下按钮时,应显示 GameViewController 视图。但是,程序会崩溃并显示标题中的消息。
在 'MenuViewController' 我有
func startGameButtonAction(sender:UIButton!)
let gameViewController = GameViewController()
self.presentViewController(gameViewController, animated: true, completion: nil)
在 'GameViewController' 我有
override func viewDidAppear(animated: Bool)
super.viewDidAppear(true)
let skView = self.view as! SKView // crash occurs here
我需要 skView 是一个 SKView,因为 GameViewController 呈现一个 SKScene。
【问题讨论】:
【参考方案1】:如果你使用 storyboard,你可以将 View 的自定义类设置为 SKView,像这样:
然后:
【讨论】:
您好,欢迎来到 SO。我建议进行编辑以内联移动图像,以便更容易查看。由于某人从图像中转录代码要困难得多,您能否也请直接将代码添加到您的帖子中(编辑您的帖子以这样做,然后突出显示代码并单击工具栏上的代码块按钮以正确格式化) .【参考方案2】:这是因为 self.view
不是 SKView
。如果您在 Interface Builder 中检查视图,您会发现它可能只是一个通用的 UIView
。
此外,您可以在崩溃的行上设置断点,然后在运行时打印出self.view
以确认它是什么类。
【讨论】:
GameViewController 是视图界面构建器中的一个 SKView。此外,如果我从图片中删除 MenuViewController 并仅使用 GameViewController,一切正常。 你说得对,self.view
是UIView
。你会如何解决这个问题?正如我所提到的,我需要强制self.view
为SKView
类型,以便显示SKScene
。另外,如果我避免使用MenuViewController
和presentViewController
,为什么一切都运行顺利?
这是错误的:让 gameViewController = GameViewController()。如果您使用故事板,您应该通过 segue 呈现控制器,或者从带有标识符的代码中正确实例化控制器。纯 init 不会实例化控制器。以上是关于无法将“UIView”类型的值转换为“SKView”的主要内容,如果未能解决你的问题,请参考以下文章
无法将“UIView”(0x112484eb0)类型的值转换为“SKView”(0x111646718)
无法将类型“(SwipeableTabBarController).Type”的值转换为预期的参数类型“UIView”
无法将类型“(MapViewController).Type”(又名“MapViewController.Type”)的值转换为预期的参数类型“UIView”