2015-09-27 4 views
0

Je comprends que beaucoup post-erreurs semblables à ceci, mais je pense que c'est une circonstance exceptionnelle.Trouver la valeur de Nil déballer un facultatif - pour une raison pas facilement apparente

Dans le cadre d'un tutoriel, je travaille à travers l'application fonctionne très bien depuis un certain temps, mais sans raison je peux travailler, il se bloque avec l'erreur

d'erreur fatale: de façon inattendue nulle en déballant une valeur facultative . Le problème est que même si je lance l'application très lentement, il semble se bloquer sur le contact des objets et parfois pas (et l'application n'a que 3 objets donc il est facile de voir ce qui se passe). La fonction qu'il casse sur est:

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!) 
    } 
} 

Je comprends que ce n'est un extrait, mais ne ressort rien à l'esprit que là où je devrais être à la recherche d'une erreur?

Répondre

0

L'erreur

fatal error: unexpectedly found nil while unwrapping an Optional value

est à cause des valeurs qui sont contraintes non emballés avec ! dans votre code.

Si vous voulez éviter ces accidents, vous pouvez en toute sécurité les valeurs déballez, par exemple avec 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") 
    } 
}