NSURLConnection вызывает сбой плохого доступа - PullRequest
4 голосов
/ 24 июня 2010

Я боролся с этим последние 48 часов и искал все форумы без толку. Я использую NSURLConnection для асинхронной загрузки ряда веб-файлов. Случайно вылетает после загрузки нескольких файлов, количество которых не фиксировано.

См. Стек вызовов ниже:

#0 0x35b634f4 in objc_msgSend
#1 0x3527c2ca in CFEqual
#2 0x3532e750 in __CFBasicHashStandardEquateKeys
#3 0x35330514 in ___CFBasicHashFindBucket_Linear
#4 0x3527c07c in CFBasicHashFindBucket
#5 0x3527bf5c in CFDictionaryGetValue
#6 0x31d15cb4 in HTTPMessage::copyConstantHeaderFieldValue
#7 0x31d6526c in URLRequest::copyConstantHeaderFieldValue
#8 0x31d606f8 in HTTPProtocol::getCacheStoragePolicy
#9 0x31d62cd0 in HTTPProtocol::updateForHeader
#10 0x31d64524 in HTTPProtocol::performHeaderRead
#11 0x31d64bf8 in HTTPProtocol::httpReadStreamEvent
#12 0x352c4302 in _signalEventSync
#13 0x352c427c in _cfstream_shared_signalEventSync
#14 0x352ed294 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
#15 0x352ef0e2 in __CFRunLoopDoSources0
#16 0x352f0058 in __CFRunLoopRun
#17 0x352970c2 in CFRunLoopRunSpecific
#18 0x35296fd0 in CFRunLoopRunInMode
#19 0x30a1f31c in +[NSURLConnection(NSURLConnectionReallyInternal) _resourceLoadLoop:]
#20 0x309ef618 in -[NSThread main]
#21 0x30a75146 in __NSThread__main__

После просмотра предыдущего потока об этом в stackoverflow действительно возникает проблема с отправкой запросов перенаправления. Предлагаемое решение заключалось в реализации

- (NSURLRequest *)connection:(NSURLConnection *)connection 
             willSendRequest:(NSURLRequest *)request 
            redirectResponse:(NSURLResponse *) redirectResponse
{
 return request;
}

Я так и сделал, но сбой все еще есть. Также поведение перед сбоем таково, что willSendRequest вызывается дважды, и никакой другой метод делегата не вызывается для этого запроса. Это вылетает внутри NSURLResponse.

1 Ответ

0 голосов
/ 18 июля 2010

Это может быть полезно: Асинхронные броски NSURLConnection EXC_BAD_ACCESS

Например:

Я исправил проблему с флагом NSZombieEnabled. Моя проблема была предоставлена ​​NSURL был объект автоматического выпуска. Таким образом, объект URL был освобожден в определенное время, и доступ к нему не удался во внутреннем коде API.

...