首页 > 解决方案 > 致命错误:init(coder:) 尚未实现。运行时错误在哪里

问题描述

代码图片

我不明白如何修复错误。如果有人明白请帮忙!

class GameScene: SKScene {
    let player = SKSpriteNode(imageNamed: "playerShip")
    let bulletSound = SKAction.playSoundFileNamed("bulletSound.wav", waitForCompletion: false)

    var gameArea: CGRect

    override init(size: CGSize)
    {
        let maxAspectRatio: CGFloat = 16.0/9.0
        let playableWidth = size.height/maxAspectRatio
        let margin = (size.width - playableWidth)/2
        gameArea = CGRect(x: margin, y: 0, width: playableWidth, height: size.height)
        super.init(size: size)
    }

    required init?(coder aDecoder: NSCoder)
    {
        fatalError("init(coder:) has not been implemented")
    }

我正在尝试为屏幕上的对象设置边界。当我写的时候super.init(size: size),Xcode 自动创建了 required init?(coder aDecoder: NSCoder),但是当它运行时我得到了以下错误:

线程 1:致命错误:init(coder:) 尚未实现

标签: iosswiftsprite-kitinit

解决方案


与 oaccamsrazor 状态一样,如果您向类中添加初始化程序,您还必须在超类中实现任何必需的初始化程序。您点击的事实init?(coder aDecoder: NSCoder)表明init(size: ...)没有被调用,可能是因为您正在从.sks文件创建场景。

init?(coder aDecoder: NSCoder)从文件创建场景时会被调用.sks,所以你不能在fatalError()那里。基本上,如果您有任何要初始化的内容,只需实际实现您的初始化程序。否则,删除所有初始化程序,拥有的要求init?(coder aDecoder: NSCoder)就会消失。


推荐阅读