关闭视图控制器时,SKScene会崩溃应用程序

时间:2016-01-28 10:20:41

标签: ios sprite-kit skscene

我正在按照教程来漂浮像Periscope一样的心。

Link to Tutorial

要提供基本提示,我发布以下代码

let heartHeight: CGFloat = 18.0

let heartsFile = "heart-bubbles.sks"

class HeartBubblesScene : SKScene {
var emitter: SKEmitterNode?

override func didMoveToView(view: SKView) {
    scaleMode = .ResizeFill // make scene's size == view's size
    //backgroundColor = UIColor.clearColor()
}

func beginBubbling() {

    emitter = SKEmitterNode(fileNamed: heartsFile)

    let x = floor(size.width / 2.0)
    let y = heartHeight

    emitter!.position = CGPointMake(x, y)

    emitter!.name = "heart-bubbles"
    emitter!.targetNode = self

    emitter?.numParticlesToEmit = 1

    addChild(emitter!)

    emitter?.resetSimulation()
}

在我的viewdidload中,我有这样的代码来呈现场景

    heartBubblesView.presentScene(heartBubblesScene)

其中heartBubblesView是一个SKView,我是通过Outlet制作的。

当我来到那个视图控制器时出现问题;突然,它崩溃了,让我看到了逻辑:

  

SpriteKit`std :: __ 1 :: __ tree_iterator *,int> std :: __ 1 :: __ tree,std :: __ 1 :: allocator> :: find:       0x29fd0f4c< + 0>:ldr r3,[r0,#4]!       0x29fd0f50< + 4>:cbz r3,0x29fd0f82; 1 + 54>       0x29fd0f52< + 6>:ldr.w r12,[r1]       0x29fd0f56< + 10>:mov r9,r0    - > 0x29fd0f58< + 12>:ldr r2,[r3,#0x10]       0x29fd0f5a< + 14>:cmp r2,r12       0x29fd0f5c< + 16>:bhs 0x29fd0f66; 1 + 26>       0x29fd0f5e< + 18>:ldr r3,[r3,#0x4]       0x29fd0f60< + 20>:cmp r3,#0x0       0x29fd0f62< + 22&gt ;:bne 0x29fd0f58; 1 + 12 - ;       0x29fd0f64< + 24>:b 0x29fd0f70; 1 + 36>       0x29fd0f66< + 26>:ldr r2,[r3]       0x29fd0f68< + 28>:mov r9,r3       0x29fd0f6a< + 30>:cmp r2,#0x0       0x29fd0f6c< + 32>:mov r3,r2       0x29fd0f6e< + 34&gt ;:bne 0x29fd0f58; 1 + 12 - ;       0x29fd0f70< + 36>:cmp r9,r0       0x29fd0f72< + 38>:beq 0x29fd0f82; 1 + 54>       0x29fd0f74< + 40>:ldr.w r2,[r9,#0x10]       0x29fd0f78< + 44>:ldr r1,[r1]       0x29fd0f7a< + 46>:cmp r1,r2       0x29fd0f7c< + 48>:它       0x29fd0f7e< + 50>:movlo r9,r0       0x29fd0f80< + 52>:b 0x29fd0f84; 1 + 56>       0x29fd0f82< + 54>:mov r9,r0       0x29fd0f84< + 56>:mov r0,r9       0x29fd0f86< + 58>:bx lr

然后我尝试将deinit添加到上面的类

deinit
{
    emitter?.targetNode = nil
    emitter!.removeAllChildren()

}

这也不起作用。

1 个答案:

答案 0 :(得分:0)

我不知道,但我把这个放在我的视图控制器中的deinitialser方法下,删除所有SKScene的孩子似乎解决了这个问题。

  deinit
{
   heartBubblesScene.removeAllChildren()
}