Ceci est l'erreur que je vois lorsque vous présentez Que se passe-t-il? p> Dites-moi si vous avez besoin d'autres info p> merci p> skscene code>, cette erreur se produit
*** 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
4 Réponses :
J'ai la même exception à l'occasion. Cela fait longtemps que pendant un moment et j'essaye de l'identifier pendant des semaines. P>
Mon soupçon est que cela peut se produire en raison de textures de préchargement, manuellement ou déclenchées automatiquement par un kit Sprite tout en même temps, un autre autre code entraîne le chargement ou l'accès des textures. P>
J'ai réduit mes preloadtextures: appels en un seul mais j'ai toujours la question, juste moins souvent. J'ai essayé de jouer: Onmainthread: Chaque fois que j'exécute un sélecteur qui accède ou chargée des images (ou que je pouvais juste que ce soit à l'intérieur d'un autre code qui fonctionne sur un fil différent. P>
Je n'ai pas eu ce crash toute la journée aujourd'hui après avoir déplacé mon code d'interface utilisateur sur le fil principal (il a été appelé à partir d'un gestionnaire d'achèvement). Je ne peux pas dire à 100% à coup sûr si cela corrigé cela. P>
J'espère que cela vous aidera un peu. Il y a définitivement quelque chose de finky, et si vous faites po 0x1459da60 code> (Dans la fenêtre de commande de LLDB, à l'aide de l'adresse fournie à l'exception) Vous verrez qu'il s'agit de la liste de texture SKTexTreatLAS qui est modifiée. J'espère que cela vous aide à identifier l'endroit où le problème vient de votre côté. P>
très bonne réponse! Merci beaucoup, vous suggérez donc d'appeler le code d'interface utilisateur à partir d'InitwithSize avec: [SelfacsSelectorAnlaintHread ..] Droite? ... et pas simplement [auto améthod]
C'est plus une observation jumelée avec une hunch, mais en général, si vous soupçonnez que le code fonctionne en parallèle avec le chargement de la texture (qui se produit en arrière-plan), il peut être utile d'essayer d'exécuter ce code particulier sur le fil principal ou après Le gestionnaire d'achèvement du préchargement de la texture est appelé. Je ne suis toujours pas sûr que je suis sûr que si mon problème soit corrigé ou que cela aurait pu la résoudre exactement en raison de la question de sorte que Sporadic.
J'ai chargé les textures en arrière-plan et le reste sur le fil principal, mais rien n'a changé :(
Maintenant, j'essaie de ne charger que la texture d'InitwithSize et, après la charge de la texture de charge, je appelle la méthode de chargement de l'interface utilisateur ... mais je ne sais toujours pas si cela fonctionnera
Je ne peux pas en dire autant que cela j'ai réussi à vous débarrasser des erreurs. Une partie du problème est un code d'empilement à l'intérieur de l'achèvement des utilisateurs ou d'autres blocs de rappel car ils peuvent être exécutés sur un thread séparé. Il peut également aider à avoir une scène de chargement séparée pour garantir aucun autre code ne fonctionne que les textures sont préchargées.
J'ai eu le même problème, quand j'ai essayé de précharger deux animations simples. J'ai essayé de précharger les animations dans un dictionnaire et demandez-les d'être appelées via une clé à chaîne. Voici ce que j'ai essayé lorsque j'ai appelé la méthode SetupDict, j'ai parfois eu la même erreur que vous. Le problème était que la précharge de mes deux animations se rencontrent. Je me suis débarrassé de l'erreur en modifiant le P> à p> de sorte que la première précharge a été effectuée avant que je tentais précharger l'autre. P> Je ne sais pas si c'est votre problème, mais si cela vous fait savoir. p> p>
Merci de votre réponse, j'essaie de résoudre ce problème en chargement de SktexTreatLas dans l'invention et après toute la texture provient de cette gamme de textures, sans rien précharger. Cela fonctionne bien sans crash et tout Sprite que vous voyez correctement .. mais je suis Je ne suis pas sûr que c'est la bonne façon
De ce que je peux dire à cela un bug de kit Sprite dans la méthode du kit Sprite: Le seul moyen de résoudre ce problème était en supprimant complètement cette méthode.
Selon Apple Documents, les textures sont également chargées si vous accédez à la propriété Ce n'est pas joli mais ça marche! p> p> Taille CODE>.
Donc, ma solution de contournement est juste de faire exactement que: p>
At-il au moins corrigé votre problème? Ou avez-vous finalement trouvé une autre solution?
Cela a effectivement travaillé pour moi aussi. Je viens de faire nslog (@ "% f", texture.size.Width); pour éviter l'avertissement de variable non utilisé.
Même chose qui se passe toujours pour moi dans xcode 6.3 bêta / swift 1.2. Voici une solution temporaire qui a fonctionné pour moi.
SKTextureAtlas.preloadTextureAtlases([SKTextureAtlas(named: "testAtlas")], withCompletionHandler: { dispatch_async(dispatch_get_main_queue(), { handler() }) })