2016-07-11 11 views
0

Ich habe ein Partikel, das ich zu einem UIViewController über eine SKScene hinzufügen. Im Folgenden ist mein SKScene Code:Entscheide ich SKScene korrekt?

class MyScene : SKScene { 
    private var emitterNode: SKEmitterNode? 

    deinit { 
     emitterNode?.removeAllActions() 
     emitterNode?.removeFromParent() 
     self.removeAllChildren() 
    } 

    override init(size: CGSize) { 
     super.init(size: size) 
     self.backgroundColor = UIColor.whiteColor() 
     let emitterPath = NSBundle.mainBundle().pathForResource("MyParticle", ofType: "sks") 
     emitterNode = NSKeyedUnarchiver.unarchiveObjectWithFile(emitterPath!) as? SKEmitterNode 
     emitterNode!.name = "myParticle" 
     emitterNode!.targetNode = self.scene 
     emitterNode!.position = CGPointMake(self.frame.size.width/2, 15) 
     self.addChild(emitterNode!) 
    } 

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

ich viel Wissen nicht auf SKScene haben, aber ich habe einen seltenen Fehler in der deinit, auf der Linie emitterNode?.removeFromParent() produziert hatte. Ist mein Code korrekt?

Antwort

0

Ihr Problem ist, dass Sie Ihre Knoten übermäßig entfernen. Deinit entfernt das übergeordnete Element von Ihrem emitterNode und findet Ihre Anfrage, aber es gibt keine anderen starken Referenzen auf diesen Knoten, so dass dies zu einem Absturz führt.

Entfernen Sie deinit {} Methode, es ist nicht notwendig. Denken Sie daran, dass in Swift mit ARC Sie diese Methode nicht verwenden müssen, ARC wird deinit und Speicher für Sie freigeben.

Hoffe, das kann Ihnen helfen.

+0

Der Grund, warum ich die Deinit-Zeile hinzugefügt habe, war, weil, wenn ich nicht, die App in iOS 8 abstürzt. Leider gibt es keinen Grund, warum es abgestürzt ist. – Tometoyou

+0

Ich habe einige universelle Apps, die mit iOS8 kompatibel sind, ohne deinit zu benutzen, vielleicht eine bestimmte alte Bibliothek aus dritten Teilen, benutzt du einige davon? –