NSGenericException reason Collection <NSConcreteMapTable:xxx>

Ila*_*rio 7 objective-c ios sprite-kit

这是我看到的错误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
Run Code Online (Sandbox Code Playgroud)

Lea*_*s2D 4

我有时也会遇到同样的例外。它已经存在了一段时间了,几周来我一直在试图找出它。

我怀疑这可能是由于预加载纹理而发生的,无论是手动还是由 Sprite Kit 自动触发,同时其他一些代码会导致纹理被加载或访问。

我已经减少了 preloadTextures: 调用,但我仍然遇到这个问题,只是频率降低了。我尝试执行performSelector:onMainThread: 每当我运行一个选择器来从completionBlock 或在不同线程上运行的其他代码中访问或加载图像(或者可能只是在内部)。

在我将用户界面代码移至主线程(它是从完成处理程序调用)后,今天一整天都没有发生此崩溃。但我不能 100% 确定这是否解决了这个问题。

希望这会有帮助。肯定有一些棘手的事情发生,如果你这样做po 0x1459da60(在 lldb 的命令窗口中,使用异常提供的地址),你会看到正在修改的是 SKTextureAtlas 纹理列表。我希望这可以帮助您查明问题出在您这边。