2015-08-05 1 views
0

J'ai une classe simple qui utilise une NSURLSession. Lorsque j'essaie de désérialiser les données au format JSON, l'application se bloque lorsque j'essaie de désérialiser les données au format JSON. J'ai déterminé que les données semblent être de la bonne longueur mais le contenu ressemble à de la foutaise dans le débogueur, donc il me semble que l'objet de données transmis est cassé. En outre, je soupçonne que certaines piles se brisent alors que je peux passer à travers ce gestionnaire de complétion et voir qu'il s'agit d'une tentative de désérialisation des données, mais lorsque le plantage survient, la pile du débogueur ne mentionne rien sur le gestionnaire de complétion. code.NSURLSession s'écraser de Swift

J'ai vu plusieurs exemples d'utilisation de NSURLSession qui ressemblent à peu près exactement au mien et qui fonctionnent. J'ai essayé d'utiliser la session partagée au lieu d'en créer une nouvelle, mais cela n'a pas aidé non plus.

Qu'est-ce qui cause ce plantage?

+0

Est-ce que cela arrive avec une URL spécifique? Je veux dire avec un type spécifique de données retournées. Je ne "parle" pas Swift, mais est-ce que ce pourrait être à cause de "var error" que vous avez redéfini? (le dans le gestionnaire 'URLSession', et celui que vous voulez utiliser pour' NSJSONSerialization')? – Larme

+0

Tout d'abord, lisez et lisez les erreurs. En second lieu, vérifiez si l'objet JSON est vraiment 'Dictionary '. Si elle contient au moins un tableau interne ou un dictionnaire, c'est plutôt 'Dictionary ' – vadian

+0

essayez de déclarer une session à l'intérieur de la fonction f. Il y a de fortes chances que vous appeliez session.dataTaskWithRequest la 2ème fois avant la fin de la première fois et que cela puisse provoquer un plantage. –

Répondre

0

Il semble que le JSON n'était pas réellement toutes les chaînes - je l'ai brainfarted et l'un d'eux était en fait un nombre.

Le vrai problème dans la question est que Swift est complètement sans valeur lors de la gestion du problème des lancers de force défaillants. Non seulement vous n'obtenez aucune sorte d'erreur utile au moment de l'exécution que vous pourriez gérer ou récupérer, mais les informations de débogage présentées quand elles se produisent sont complètement trompeuses et pointent vers le mauvais endroit. Vous obtenez simplement un piège dans une fonction sans symboles avec la mauvaise callstack.