0

我知道很多类似这样的帖子错误,但我觉得这是一个例外情况。

作为教程的一部分,我正在通过该应用程序运行很长一段时间,但随后无缘无故我可以解决它因错误而崩溃

致命错误:在展开可选值时意外发现 nil。问题是,即使我非常缓慢地运行应用程序,它似乎在接触对象时会崩溃,有时不会(并且应用程序只有 3 个对象,因此很容易看到发生了什么)。它打破的功能是:

func didBeginContact(contact: SKPhysicsContact) {
    if contact.bodyA.node!.name == "ball" {
        collisionBetweenBall(contact.bodyA.node!, object: contact.bodyB.node!)
    } else if contact.bodyB.node!.name == "ball" {
        collisionBetweenBall(contact.bodyB.node!, object: contact.bodyA.node!)
    }
}

我知道这只是一个片段,但是我应该在哪里寻找错误?

4

1 回答 1

0

错误

致命错误:在展开可选值时意外发现 nil

是因为!在您的代码中强制解包的值。

如果您想避免这些崩溃,您可以安全地打开这些值,例如if let

func didBeginContact(contact: SKPhysicsContact) {
    if let bodyANode = contact.bodyA.node, let bodyBNode = contact.bodyB.node {
        if bodyANode.name == "ball" {
            collisionBetweenBall(bodyANode, object: bodyBNode)
        } else if bodyBNode.name == "ball" {
            collisionBetweenBall(bodyBNode, object: bodyANode)
        }
    } else {
        print("error, one of the nodes was nil")
    }
}
于 2015-09-27T13:42:29.313 回答