Я выполняю многоасинхронный (делегировать, а не блок) NSURLConnections
одновременно, и все они возвращаются очень быстро, когда я нахожусь на LAN-сервере.несуществующий NSURLConnection никогда не выполняет или не истекает
Каждый так часто один NSURLConnection
будет исчезать и никогда не вернуться.
connection:willSendRequest:
называется, но connection:didReceiveResponse:
(и неисправность) нет.
Любые идеи? Мне интересно, если я должен сделать простую замену, используя вместо этого CFNetwork
.
Редактировать: на самом деле кода очень мало. То, что я сделал, создает класс-оболочку для загрузки файлов. Отмечу, что проблема возникает минус, когда я запускаю соединение в отдельной очереди - но все же происходит.
Общий смысл того, что я делаю, создает запрос на загрузку каждой ячейки в виде прокрутки таблицы (в cellForRowAtIndexPath
), а затем асинхронную загрузку в файл изображения в ячейку таблицы, если ячейка все еще видна.
_request = [NSMutableURLRequest requestWithURL:_URL];
_request.cachePolicy = NSURLRequestReloadIgnoringCacheData;
_request.timeoutInterval = _timeoutInterval;
if(_lastModifiedDate) {
[_request setValue:[_lastModifiedDate RFC1123String] forHTTPHeaderField:@"If-Modified-Since"];
}
_connection = [[NSURLConnection alloc] initWithRequest:_request
delegate:self
startImmediately:NO];
[_connection start];
В соответствии с просьбой, переменные экземпляра:
NSMutableURLRequest *_request;
NSURLConnection *_connection;
И делегируют методы:
- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response {
NSLog(@"%@ send", _URL);
return request;
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSLog(@"%@ response", _URL);
_response = (id)response;
// create output stream
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
_receivedLength += data.length;
_estimatedProgress = (Float32)_receivedLength/(Float32)_response.expectedContentLength;
[_outputStream write:data.bytes maxLength:data.length];
// notify delegate
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// close output stream
// notify delegate
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
NSLog(@"%@ failure", _URL);
// notify delegate
}
- (void)connection:(NSURLConnection *)connection
didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
if(_credential && challenge.previousFailureCount == 0) {
[[challenge sender] useCredential:_credential forAuthenticationChallenge:challenge];
}
}
Можете ли вы предоставить более подробную информацию о вас кода, пожалуйста? Кстати, у меня аналогичная проблема с NSURLConnection тоже. Вы находите какое-то общее между вашим и моим [здесь] (http://stackoverflow.com/questions/17848290/nsurlconnection-doesnt-receive-data-when-creating-many-downloading-objects-in-i) – Envil
Пожалуйста, покажите объявление для '_request' и' _connection', а также ваши методы делегирования (разделенные). Что, между прочим, «делегировать»? Это диспетчер представлений, другой объект? –
Это, по сути, «я» для этой дискуссии. У меня есть опция на моем объекте-оболочке, чтобы использовать слабый прокси-сервер, чтобы NSURLConnection не поддерживал мой объект. Этот флаг отключен в этом случае. – xtravar