NSURLProtocol и прогресс загрузки - PullRequest
6 голосов
/ 07 февраля 2012

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

Кто-то нашел какой-либо обходной путь для этого?

Ответы [ 2 ]

0 голосов
/ 05 апреля 2016

Используйте setProperty:forKey:inRequest: для сохранения NSURLConnection и делегирования объекта, затем используйте propertyForKey:inRequest: для загрузки NSURLConnection объекта и делегирования объекта в пользовательском классе NSURLProtocol, при отправке данных используйте объект NSURLConnection и делегируйтевызовите метод делегата

0 голосов
/ 07 февраля 2012

добавьте эту строку в ваш код, чтобы сделать запрос HTTP POST:

[lInnerRequest setHTTPMethod:@"POST"];
...