Я использую подкласс NSURLProtocol для перехвата всех HTTP-вызовов и изменения пользовательского агента, а также для добавления других HTTP-заголовков, необходимых моему серверу.
-(id)initWithRequest:(NSURLRequest *)request
cachedResponse:(NSCachedURLResponse *)cachedResponse
client:(id <NSURLProtocolClient>)client
{
NSMutableURLRequest* lInnerRequest;
//************************************************
lInnerRequest = [request mutableCopy];
[lInnerRequest setValue:@"MyUserAgent" forHTTPHeaderField:@"User-Agent"];
//************************************************
self = [super initWithRequest:lInnerRequest
cachedResponse:cachedResponse
client:client];
//************************************************
if (self)
{
self.innerRequest = lInnerRequest;
}
//***********************************00*************
[lInnerRequest release];
//************************************************
return self;
}
Мой протокол затем использует NSURLConnection
- (void)startLoading
{
self.URLConnection = [NSURLConnection connectionWithRequest:self.innerRequest delegate:self];
}
Затем я реализую весь метод делегата в NSURLConnection, перенаправляя вызов эквивалентному методу NSURLProtocolClient. В целом это работает хорошо, но когда я загружаю данные на сервер, мой код, использующий NSURLConnection, не вызывается обратно:
connection: didSendBodyData: totalBytesWritten: totalBytesExpectedToWrite:
Я понимаю, почему это так, поскольку я этого не делал. Не реализовывать этот метод в NSURLProtocol, поскольку нет эквивалентного метода NSURLProtocolClient, который можно было бы использовать для отчета о ходе загрузки.
Нашел ли кто-нибудь способ обхода этой проблемы?