swift - NS无效参数异常 : A Node can't parent itself

标签 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 中看不到它们。我希望你明白我想说的是什么

最佳答案

我的猜测是:

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

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

关于swift - NS无效参数异常 : A Node can't parent itself,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28849361/

相关文章:

ios - 如何使 collectionView 中的可折叠标题与 Facebook 标题相同?

swift - 无法在 Xcode Playgrounds 中创建文件夹?

swift - Swift 自增后如何赋值?

swift - 确定 Swift 字符串是否短于特定长度的最有效方法是什么

ios - 如何在 Swift 中为我的旋转圆做一个 if 语句?

swift - 如何在 Swift 子类的初始化器中调用静态属性?

arrays - Swift3 - 扩展类型 Collection 的问题

xcode - 无法从 XCode Playground 中导入的框架访问类

swift - Playground 绘图和 Project for Swift 之间的区别

ios - 如何在首次启动时仅显示一次 UIPageViewController