2010-09-15 4 views
2

Je reçois parfois des rapports d'erreur sur un EXC_BAD_ACCESS avec NSURLConnection (je suppose qu'il s'agit de NSURLConnection selon les rapports d'erreur).iphone: random EXC_BAD_ACCESS avec NSURLConnection

J'ai trouvé une question ici sur StackOverflow avec le même type de rapport mais rien n'y a aidé:/(NSURLConnection causes bad access crash); J'ai essayé d'exécuter l'application avec NSZombieEnabled mais puisque ce problème est vraiment "aléatoire" je n'ai jamais réussi à l'obtenir en cours d'exécution avec NSZombieEnabled:/

Quelqu'un at-il un indice?

Merci beaucoup :)

Voici un Repport:

Thread 3 Crashed: 
0 libobjc.A.dylib    0x0000286c objc_msgSend + 16 
1 CoreFoundation     0x0000325c CFEqual + 92 
2 CoreFoundation     0x000b081c __CFBasicHashStandardEquateKeys + 12 
3 CoreFoundation     0x000b2578 ___CFBasicHashFindBucket_Linear + 216 
4 CoreFoundation     0x00002ff8 CFBasicHashFindBucket + 220 
5 CoreFoundation     0x00002ec6 CFDictionaryGetValue + 50 
6 CFNetwork      0x0005853a HTTPMessage::copyConstantHeaderFieldValue(unsigned int) const + 26 
7 CFNetwork      0x00090024 URLRequest::copyConstantHeaderFieldValue(unsigned int) const + 20 
8 CFNetwork      0x0008ce0e HTTPProtocol::getCacheStoragePolicy(__CFHTTPMessage*) + 158 
9 CFNetwork      0x0008e6c8 HTTPProtocol::updateForHeader(__CFHTTPMessage*) + 492 
10 CFNetwork      0x0008f73c HTTPProtocol::performHeaderRead() + 368 
11 CFNetwork      0x0008fbea HTTPProtocol::httpReadStreamEvent(unsigned long) + 110 
12 CFNetwork      0x0008fd34 HTTPProtocol::_httpReadStreamCB(__CFReadStream*, unsigned long, void*) + 4 
13 CoreFoundation     0x0004985e _signalEventSync + 70 
14 CoreFoundation     0x000497f2 _cfstream_shared_signalEventSync + 198 
15 CoreFoundation     0x00071a86 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 6 
16 CoreFoundation     0x000736ac __CFRunLoopDoSources0 + 188 
17 CoreFoundation     0x00074504 __CFRunLoopRun + 224 
18 CoreFoundation     0x0001d8e4 CFRunLoopRunSpecific + 224 
19 CoreFoundation     0x0001d7ec CFRunLoopRunInMode + 52 
20 Foundation      0x0003b71e +[NSURLConnection(NSURLConnectionReallyInternal) _resourceLoadLoop:] + 206 
21 Foundation      0x0000bc96 -[NSThread main] + 38 
22 Foundation      0x000909da __NSThread__main__ + 966 
23 libSystem.B.dylib    0x0007a986 _pthread_start + 242 
24 libSystem.B.dylib    0x000700e4 thread_start + 0 

Mise à jour

J'ai finalement réussi à obtenir l'erreur alors que NSZombieEnabled est ... mais il ne aider beaucoup:/

Voici la trace arrière:

[Switching to thread 13059] 
Program received signal: “EXC_BAD_ACCESS”. 
[Switching to thread 13059] 
(gdb) bt 
#0 0x3090ce9c in CFDictionaryGetValue() 
#1 0x35233540 in HTTPMessage::copyConstantHeaderFieldValue() 
#2 0x3526b02a in URLRequest::copyConstantHeaderFieldValue() 
#3 0x35267e14 in HTTPProtocol::getCacheStoragePolicy() 
#4 0x352693e2 in HTTPProtocol::attemptToCacheMovedPermanently() 
#5 0x3526a6c8 in HTTPProtocol::performHeaderRead() 
#6 0x3526abf0 in HTTPProtocol::httpReadStreamEvent() 
#7 0x3526ad3a in HTTPProtocol::_httpReadStreamCB() 
#8 0x30953864 in _signalEventSync() 
#9 0x309537f8 in _cfstream_shared_signalEventSync() 
#10 0x3097ba8c in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__() 
#11 0x3097d6b2 in __CFRunLoopDoSources0() 
#12 0x3097e50a in __CFRunLoopRun() 
#13 0x309278ea in CFRunLoopRunSpecific() 
#14 0x309277f2 in CFRunLoopRunInMode() 
#15 0x3148b724 in +[NSURLConnection(NSURLConnectionReallyInternal) _resourceLoadLoop:]() 
#16 0x3145bc9c in -[NSThread main]() 
#17 0x314e09e0 in __NSThread__main__() 
#18 0x3129298c in _pthread_start() 
#19 0x312880ec in thread_start() 
(gdb) 
+0

Il est vraiment difficile de savoir si je ne peux pas voir votre code. Dans ce cas, l'inspection du code est le meilleur et peut-être le seul moyen – vodkhang

+0

Utilisez la source, Luke. –

+0

Eh bien, je ne peux pas vous montrer le code car je ne sais pas quelle partie du code peut causer cette erreur:/Devrait donner l'ensemble des sources du projet.Encore une fois, il est assez aléatoire et les rapports d'accident ne sont pas utiles – Vivi

Répondre

3

Ok, j'ai trouvé la solution/problème.

Mon code était OK, l'origine du problème est que j'essayais d'obtenir des images de mon site Web en utilisant ces NSURLConnections ... mais nos gars de SEO ont changé les URLs d'images ainsi j'avais redirigé des demandes.

NSURLConnection n'aime pas beaucoup les requêtes redirigées.

Merci pour votre aide!

3

Je ne suis pas sûr qu'il ya des informations vraiment assez pour fournir beaucoup d'aide :-(

Tout d'abord, ne persistent avec de NSZombie - Je suis sûr que dans le temps, vous obtiendrez que cela se produise. Assurez-vous de vérifier la sortie de la console, il y a une petite chance que l'exception que nszombie jette pourrait être prise et ignorée quelque part.

À part cela, vérifiez tout ce que vous faites avec de la mémoire. Assurez-vous que la requête est annulée avant d'être relâchée, que vous n'écrasez jamais accidentellement un pointeur vers une requête en cours avec une autre requête, assurez-vous de ne pas surcharger les objets que vous passez à la requête.

Une dernière suggestion qui peuvent ou peuvent ne pas résoudre votre problème serait d'essayer ASIHTTPRequest à la place:

http://allseeing-i.com/ASIHTTPRequest/

Il peut tout faire NSURLConnection peut faire (et beaucoup de choses utiles en plus), et Si vous avez toujours des plantages, vous aurez au moins la source pour obtenir plus d'informations sur ce qui ne va pas.

+1

+1 pour asihttprequest car il est si facile sans problème – harshalb

+0

Ah oui assez bon conseil :) Va vérifier tout de suite – Vivi

+0

Juste eu l'erreur avec NSZombieEnabled ... mais le backtrace n'aide pas beaucoup: – Vivi

Questions connexes