Я использую подкласс 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, который можно использовать для отчета о ходе загрузки.
Кто-то нашел какой-либо обходной путь для этого?