NSInvalidArgumentException:节点不能自己父

时间:2015-03-04 08:07:36

标签: swift swift-playground

我想知道当我们收到类似'NSInvalidArgumentException'的错误时它意味着什么,原因是:'一个节点不能自己为父':

2015-03-04 01:51:33.421 FlappyPOOSwift[1789:155918] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'A Node can't parent itself: <SKSpriteNode> name:'(null)' texture:[<SKTexture> 'pipeDown' (30 x 160)] position:{0, 851} size:{60, 320} rotation:0.00'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000105361f35 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x000000010705bbb7 objc_exception_throw + 45
    2   CoreFoundation                      0x0000000105361e6d +[NSException raise:format:] + 205
    3   SpriteKit                           0x0000000105c23d14 -[SKNode(setParent) setParent:] + 134
    4   SpriteKit                           0x0000000105c1c1ea -[SKNode addChild:] + 179
    5   FlappyPOOSwift                      0x00000001051754d6 _TFC14FlappyPOOSwift9GameScene10spawnPipesfS0_FT_T_ + 2294
    6   FlappyPOOSwift                      0x0000000105176e28 _TFFC14FlappyPOOSwift9GameScene13didMoveToViewFS0_FCSo6SKViewT_U_FT_T_ + 56
    7   FlappyPOOSwift                      0x0000000105176e67 _TTRXFo__dT__XFdCb__dT__ + 39
    8   SpriteKit                           0x0000000105c11586 -[SKRunBlock updateWithTarget:forTime:] + 99
    9   SpriteKit                           0x0000000105beb586 _ZN11SKCSequence27cpp_updateWithTargetForTimeEP9SKCSprited + 92
    10  SpriteKit                           0x0000000105be374c _ZN9SKCRepeat27cpp_updateWithTargetForTimeEP9SKCSprited + 40
    11  SpriteKit                           0x0000000105c3bce8 _ZN9SKCSprite6updateEd + 170
    12  SpriteKit                           0x0000000105bf5435 -[SKScene _update:] + 120
    13  SpriteKit                           0x0000000105c0f949 -[SKView(Private) _update:] + 563
    14  SpriteKit                           0x0000000105c0d2d9 -[SKView renderCallback:shouldBlock:] + 837
    15  SpriteKit                           0x0000000105c0a391 __29-[SKView setUpRenderCallback]_block_invoke + 56
    16  SpriteKit                           0x0000000105c36df4 -[SKDisplayLink _callbackForNextFrame:] + 256
    17  QuartzCore                          0x0000000109c73747 _ZN2CA7Display15DisplayLinkItem8dispatchEv + 37
    18  QuartzCore                          0x0000000109c7360f _ZN2CA7Display11DisplayLink14dispatch_itemsEyyy + 315
    19  CoreFoundation                      0x00000001052c9f64 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
    20  CoreFoundation                      0x00000001052c9b25 __CFRunLoopDoTimer + 1045
    21  CoreFoundation                      0x000000010528ce5d __CFRunLoopRun + 1901
    22  CoreFoundation                      0x000000010528c486 CFRunLoopRunSpecific + 470
    23  GraphicsServices                    0x000000010c70e9f0 GSEventRunModal + 161
    24  UIKit                               0x0000000105da3420 UIApplicationMain + 1282
    25  FlappyPOOSwift                      0x000000010517a89e top_level_code + 78
    26  FlappyPOOSwift                      0x000000010517a8da main + 42
    27  libdyld.dylib                       0x0000000107847145 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

提前致谢。


嗨,我想生病只是告诉你代码

func spawnPipes() {
    let pipePair = SKNode()
    pipePair.position = CGPointMake(self.frame.size.width + pipeUpTexture.size().width * 2, 0)
    pipePair.zPosition = -10

    let height = UInt32(self.frame.size.height / 4)
    let y = arc4random() % height + height
    let pipeDown = SKSpriteNode (texture: pipeDownTexture)

    pipeDown.setScale(2.0)
    pipeDown.position = CGPointMake(0.0 , CGFloat(y) + pipeDown.size.height + CGFloat(pipeGap))
    pipeDown.physicsBody = SKPhysicsBody (rectangleOfSize: pipeDown.size)
    pipeDown.physicsBody?.dynamic = false
    pipeDown.addChild(pipeDown)

    //pipe Up

    **let pipeUp = SKSpriteNode (texture: pipeUpTexture)**
    pipeUp.setScale(2.0)
    pipeUp.position = CGPointMake(0.0 , CGFloat(y))
    pipeUp.physicsBody = SKPhysicsBody (rectangleOfSize: pipeUp.size)
    pipeUp.physicsBody?.dynamic = false
    pipeUp.addChild(pipeUp)
    pipePair.runAction(PipesMoveAndRemove)
    self.addChild(pipePair)
}

我猜**标记的行有错误但我在Xcode中看不到它们。我希望你明白我想说的是什么

1 个答案:

答案 0 :(得分:1)

我的猜测是:

  • 您正尝试将节点添加到自身(作为错误提及),例如:pipeDownNode.addChild(pipeDownNode)而不是anotherNode.addChild(pipeDownNode)
  • 您尝试在同一节点添加节点两次,例如:aNode.addChild(pipeDownNode)pipeDownNode.parent = aNode

如果有帮助,请告诉我。否则,请添加一些代码(添加节点的地方)。