这是我在出现SKScene时看到的错误,此错误随机发生,无法复制
*由于未捕获的异常’NSGenericException’而终止应用程序,原因:’* Collection< NSConcreteMapTable:0x1459da60>在被列举时发生了变异.
发生了什么?
告诉我你是否需要任何其他信息
谢谢
编辑:
*** First throw call stack: ( 0 CoreFoundation 0x025601e4 __exceptionPreprocess + 180 1 libobjc.A.dylib 0x022298e5 objc_exception_throw + 44 2 CoreFoundation 0x025efcf5 __NSFastEnumerationMutationHandler + 165 3 Foundation 0x01e47f03 -[NSConcreteMapTable countByEnumeratingWithState:objects:count:] + 66 4 CoreFoundation 0x0253d77f -[__NSFastEnumerationEnumerator nextObject] + 143 5 SpriteKit 0x01d009f2 +[SKTextureAtlas(Internal) findTextureNamed:] + 232 6 SpriteKit 0x01cf709c __26-[SKTexture loadImageData]_block_invoke + 1982 7 SpriteKit 0x01d34d09 _Z14SKSpinLockSyncPiU13block_pointerFvvE + 40 8 SpriteKit 0x01cf6898 -[SKTexture loadImageData] + 228 9 SpriteKit 0x01cf65d9 __51+[SKTexture preloadTextures:withCompletionHandler:]_block_invoke + 241 10 libdispatch.dylib 0x02b117b8 _dispatch_call_block_and_release + 15 11 libdispatch.dylib 0x02b264d0 _dispatch_client_callout + 14 12 libdispatch.dylib 0x02b14eb7 _dispatch_root_queue_drain + 291 13 libdispatch.dylib 0x02b15127 _dispatch_worker_thread2 + 39 14 libsystem_c.dylib 0x02de1e72 _pthread_wqthread + 441 15 libsystem_c.dylib 0x02dc9daa start_wqthread + 30 ) libc++abi.dylib: terminating with uncaught exception of type NSException
解决方法
我偶尔会得到同样的例外.它已经存在了一段时间,我一直在努力查明它数周.
我怀疑是由于预加载纹理可能会发生,无论是手动还是由Sprite Kit自动触发,同时其他一些代码会导致纹理被加载或访问.
我已经减少了我的preloadTextures:调用单个,但我仍然得到问题,只是不那么频繁.我曾尝试执行Selector:onMainThread:每当我运行一个选择器,它可以在completionBlock或其他运行在不同线程上的代码中访问或加载图像(或者只是内部).
在我将用户界面代码移动到主线程(它是从完成处理程序调用)之后,我今天整天都没有遇到此崩溃.我不能100%确定这是否能解决这个问题.
希望这会有帮助.肯定会有一些挑剔的事情发生,如果你做了po 0x1459da60(在lldb的命令窗口中,使用异常提供的地址),你会看到它正在被修改的SKTextureAtlas纹理列表.我希望这可以帮助您确定问题来自哪方面.