swift - (swift/xcode) 错误消息 : 'Setting this node as parent would create a loop'

标签 swift xcode sprite-kit

这个错误信息是什么意思?我在谷歌上根本找不到任何关于它的信息。任何修复它的方法都会很好。作为引用,这是完整的错误消息:

2017-05-15 10:09:10.942 Tetris[2258:77198] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Setting this node as parent would create a loop: <SKNode> name:'(null)' position:{6, -6} scale:{1.00, 1.00} accumulatedFrame:{{12, -412}, {200, 400}}' *** First throw call stack: ( 0 CoreFoundation 0x000000010fa4dd4b __exceptionPreprocess + 171 1 libobjc.A.dylib 0x000000010cacb21e objc_exception_throw + 48 2 CoreFoundation 0x000000010fab72b5 +[NSException raise:format:] + 197 3 SpriteKit 0x000000010cfe3134 -[SKNode(setParent) setParent:] + 87 4 SpriteKit 0x000000010cfdc376 -[SKNode insertChild:atIndex:] + 230 5 SpriteKit 0x000000010cfdc26f -[SKNode addChild:] + 68 6 Tetris 0x000000010c4bafe0 _TFC6Tetris9GameScenecfT4sizeVSC6CGSize_S0_ + 1376 7 Tetris 0x000000010c4bb080 _TFC6Tetris9GameSceneCfT4sizeVSC6CGSize_S0_ + 64 8 Tetris 0x000000010c4c23f2 _TFC6Tetris18GameViewController11viewDidLoadfT_T_ + 274 9 Tetris 0x000000010c4c3222 _TToFC6Tetris18GameViewController11viewDidLoadfT_T_ + 34 10 UIKit 0x000000010d368a3d -[UIViewController loadViewIfRequired] + 1258 11 UIKit 0x000000010d368e70 -[UIViewController view] + 27 12 UIKit 0x000000010d2324b5 -[UIWindow addRootViewControllerViewIfPossible] + 71 13 UIKit 0x000000010d232c06 -[UIWindow _setHidden:forced:] + 293 14 UIKit 0x000000010d246519 -[UIWindow makeKeyAndVisible] + 42 15 UIKit 0x000000010d1bef8d -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 4818 16 UIKit 0x000000010d1c50ed -[UIApplication _runWithMainScene:transitionContext:completion:] + 1731 17 UIKit 0x000000010d1c226d -[UIApplication workspaceDidEndTransaction:] + 188 18 FrontBoardServices 0x0000000116a4b6cb __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 24 19 FrontBoardServices 0x0000000116a4b544 -[FBSSerialQueue _performNext] + 189 20 FrontBoardServices 0x0000000116a4b8cd -[FBSSerialQueue _performNextFromRunLoopSource] + 45 21 CoreFoundation 0x000000010f9f2761 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 22 CoreFoundation 0x000000010f9d798c __CFRunLoopDoSources0 + 556 23 CoreFoundation 0x000000010f9d6e76 __CFRunLoopRun + 918 24 CoreFoundation 0x000000010f9d6884 CFRunLoopRunSpecific + 420 25 UIKit 0x000000010d1c0aea -[UIApplication _run] + 434 26 UIKit 0x000000010d1c6c68 UIApplicationMain + 159 27 Tetris 0x000000010c4c858f main + 111 28 libdyld.dylib 0x00000001109fd68d start + 1 29 ??? 0x0000000000000001 0x0 + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)

最佳答案

可能发生的情况是您正在尝试创建一个自相矛盾的节点层次结构。

您可能知道,节点可以有父节点和子节点。您需要确保在设置这些节点的关系时,不会创建一个“循环”,使子节点最终成为其父节点的祖先。

例如,如果您有一个节点“A”,并且创建了一个新节点“B”并将其添加为子节点,则您无法转身将“A”添加为“B”的子节点,因为这将创建一个循环。

同样,您不能让“A”具有“B”的子级,然后使“C”成为“B”的子级,然后让“A”成为“C”的子级。等等。基本上,不能出现节点同时显示为祖先和后代的情况。

这很重要,因为需要明确定义层次结构。例如,您需要能够遍历节点的祖先来找到“根”节点,或者找出它在更高节点的引用系中的位置。如果创建祖先循环,这些对节点祖先的递归搜索将创建无限循环,因此避免它们很重要。 SpriteKit 会为您提供可靠的帮助,并在您建立关系时进行检查,以确保您没有这样做。因此,出现错误。

关于swift - (swift/xcode) 错误消息 : 'Setting this node as parent would create a loop' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44076066/

相关文章:

ios - 单击按钮删除 View

ios - 为 iOS 应用设计样式的最佳实践

crash - SKScene 无法释放内存导致内存增长受限

ios - 在数组中查找具有相同颜色的元素,如果它们彼此相邻则打印 true

swift - 使用 Swift 3 随机移动 Sprite

ios - 将 CollectionView 照片传递到电子邮件附件 iOS swift

ios - 在玩家节点上定义 map 边界和中心?

ios - 在 iOS 中设置 Parse

iphone - 证书、应用程序 ID 和配置文件

iphone - xcode 将 iPhone 转换为 iPad