7
votes

NsgenericeXception Collection de raisons

Ceci est l'erreur que je vois lorsque vous présentez skscene code>, cette erreur se produit aléatoire forte> et ne sont pas capables de reproduire

* Terminant application en raison d'une application non capturée Exception 'NsgenericeXception', Raison: '* Strong> Collection a été muté tout en étant énuméré.' P>

Que se passe-t-il? p>

Dites-moi si vous avez besoin d'autres info p>

merci p>

EDIT: strong> p>

*** 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


0 commentaires

4 Réponses :


4
votes

J'ai la même exception à l'occasion. Cela fait longtemps que pendant un moment et j'essaye de l'identifier pendant des semaines.

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.

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.

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.

J'espère que cela vous aidera un peu. Il y a définitivement quelque chose de finky, et si vous faites po 0x1459da60 (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é.


5 commentaires

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.



2
votes

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é xxx

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 xxx

à xxx

de sorte que la première précharge a été effectuée avant que je tentais précharger l'autre.

Je ne sais pas si c'est votre problème, mais si cela vous fait savoir.


1 commentaires

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



4
votes

De ce que je peux dire à cela un bug de kit Sprite dans la méthode du kit Sprite: xxx

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é Taille . Donc, ma solution de contournement est juste de faire exactement que: xxx

Ce n'est pas joli mais ça marche!


2 commentaires

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é.



1
votes

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()
    })
})


0 commentaires