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

Ary*_*oel 25 ios sprite-kit swift xcode6.3.2 xcode7

无法将'UIView'(0x112484eb0)类型的值转换为'SKView'(0x111646718).我继续得到这个错误.任何人都可以帮助我,因为默认情况下代码行是存在的.我使用xcode 7 beta将SK游戏转换为最新的swift语法.编译器遗漏了很多东西,这就是我回到xcode 6的原因.我没有红色错误; 但是,游戏崩溃并说线程1:信号SIGARBT.关于swift 2和swift 1的最新版本之间的变化的任何提示可能会导致转换为最新的swift语法时出现问题.也许是转换过的东西,我应该在xcode 6.3.2中改变.一旦此崩溃问题得到解决,我将删除测试版.代码中可能存在错误,因为当我将代码复制到一个全新的xcode项目时,我遇到了同样的错误.提前致谢!

let skView = self.view as! SKView
Run Code Online (Sandbox Code Playgroud)

ara*_*sss 60

转到Storyboard,选择包含SpriteKit游戏的UIViewController,然后从左侧菜单中选择视图:

在此输入图像描述

现在去身份检查,并确保类是SKViewUIView:

在此输入图像描述

您现在应该能够从UIViewController以下代码编译这部分代码:

// Configure the view.
SKView * skView = (SKView *)self.view;
Run Code Online (Sandbox Code Playgroud)

或者在Swift中:

let skView = self.view as! SKView
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案 - 操作必须做其他导致问题的事情 (3认同)
  • 两个大拇指,这就是答案. (3认同)
  • 谢谢你的回答.这对我很有帮助.但我也必须将UIView对象本身转换为ViewController:/ (2认同)

小智 12

对于那些谁不想使用Storyboard,可以简单的创建视图作为SKViewViewControllerloadView功能.

class ViewController: UIViewController {
  override func loadView() {
    self.view = SKView()
  }

  override func viewDidLoad() {
    let skView = view as! SKView
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)


Ary*_*oel -2

我终于修好了!我必须将函数放在 gameScene 中并用 self.view! 替换 view,而不是将函数放在 GameViewController 中并从游戏场景中调用它们。