无法将“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.viewUIView。你会如何解决这个问题?正如我所提到的,我需要强制self.viewSKView 类型,以便显示SKScene。另外,如果我避免使用MenuViewControllerpresentViewController,为什么一切都运行顺利? 这是错误的:让 gameViewController = GameViewController()。如果您使用故事板,您应该通过 segue 呈现控制器,或者从带有标识符的代码中正确实例化控制器。纯 init 不会实例化控制器。

以上是关于无法将“UIView”类型的值转换为“SKView”的主要内容,如果未能解决你的问题,请参考以下文章

无法将“UIView”(0x112484eb0)类型的值转换为“SKView”(0x111646718)

无法将类型“(SwipeableTabBarController).Type”的值转换为预期的参数类型“UIView”

无法将类型“(MapViewController).Type”(又名“MapViewController.Type”)的值转换为预期的参数类型“UIView”

无法将“UIView”(0x10d54a4c0)类型的值转换为“UIButton”(0x10d552120)

如何从 SKView 转换到 SCNView?

无法分配类型“UnsafeMutableRawPointer!”的值输入“UIView”