【问题标题】:Could not cast value of type 'UIView' (0x112484eb0) to 'SKView' (0x111646718)无法将“UIView”(0x112484eb0)类型的值转换为“SKView”(0x111646718)
【发布时间】:2015-08-27 19:43:27
【问题描述】:

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

let skView = self.view as! SKView

【问题讨论】:

  • 问题不在于线路。它是情节提要中场景的配置。这个对象的场景为视图出口指定了一个 UIView,而不是一个 SKView
  • 这不是代码。这是故事板场景
  • 正如我上面所说,该类的视图出口是 UIView 的实例,而不是 SKView - 检查场景,最外面的视图是什么?它的类是什么?
  • 在您的 Storyboard 上,检查您的 GameViewController( *UIViewController),然后单击空视图。如果您转到 Identity Inspector(右侧菜单,第三个图标),您应该会看到 Class SKView,但您可能有 UIView,这会导致错误。将此类更改为 SKView。 - 添加了带有图像的答案
  • 我相信你应该接受 ArinW。的或 aramusss 的答案,如果您愿意,请以更清晰的方式提出问题并发布您的答案以帮助其他人解决相同的问题,即如果问题仍然可以重现(作为 swift 语言和可能的框架在这篇文章之后有所发展)。例如:标题为“在 时无法将 'UIView' 类型的值转换为 'SKView'”并具有可重复的步骤。

标签: ios swift sprite-kit xcode7 xcode6.3.2


【解决方案1】:

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

现在转到 Identity Inspector 并确保 Class 是 SKView 而不是 UIView

您现在应该可以从您的UIViewController 编译这部分代码:

// Configure the view.
SKView * skView = (SKView *)self.view;

或者在 Swift 中:

let skView = self.view as! SKView

【讨论】:

  • 还能是什么?
  • 我创建了一个新的 xcode 项目并复制了所有代码。还是一样的错误。
  • 如果你创建一个新的 Xcode 项目,选择 Game,with Swift 并(不修改任何代码)运行项目,你会得到同样的错误吗?如果是这样,我建议您从头开始重新安装 Xcode(没有 BETAS,Apple Store 的稳定版本)
  • 否则它是稳定的。我正在使用 xcode 6.3.2 稳定版。
  • 感谢您的回答。这对我很有帮助。但我也必须将 UIView 对象本身添加到 ViewController :/
【解决方案2】:

对于那些不想使用Storyboard 的人,您可以在ViewControllerloadView 函数中简单地将视图创建为SKView

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

  override func viewDidLoad() {
    let skView = view as! SKView
    ...
  }
}

【讨论】:

    【解决方案3】:

    简单的修复。您只需将您使用的每个视图控制器的视图从 UIView 更改为 SKView。

    【讨论】:

    • 我不明白为什么这被否决了。这确实有效...+1
    • 谢谢穆辛。我很高兴这个解决方案能像我一样帮助你!
    【解决方案4】:

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

    【讨论】:

    • 这似乎不是一个合理的解决方案,而是一个 hack/workaround。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    相关资源
    最近更新 更多