2016-07-11 4 views
0

UIViewControllerSKSceneまで追加しているパーティクルがあります。私はSKSceneに多くの知識を持っていないが、私はラインemitterNode?.removeFromParent()に、deinit内部に発生するまれな誤りがあったSKSceneが正しく設定されていますか?

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

:次は私のSKSceneコードです。私のコードは正しいですか?

答えて

0

あなたの問題はあなたのノードを上書きしていることです。 DeinitはemitterNodeの親を削除してリクエストしますが、そのノードへの他の強い参照がないので、クラッシュが発生します。

deinit {}メソッドを削除する必要はありません。 SwiftARCこの方法を使用する必要はありません。ARCは、あなたのためにメモリを解放して解放します。

希望すると、これが役立ちます。

+0

私がdeinit行を追加したのは、iOS 8でアプリケーションがクラッシュするためでした。残念ながら、クラッシュした理由はありません。 – Tometoyou

+0

私はいくつか普遍的なアプリを使用していないdeinit、おそらく3番目の部分からいくつかの特定の古いライブラリは、それらのいくつかを使用しているiOS8の互換性から始めている? –

関連する問題