Вернуть пользовательский класс NSURLResponse - PullRequest
5 голосов
/ 08 апреля 2011

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

Это часть NSURLProtocol, где я возвращаю свой пользовательский TestURLResponse:

TestURLResponse* response = [[[TestURLResponse alloc] initWithURL: [[self request] URL]
                                                        MIMEType: @"text/plain" 
                                           expectedContentLength: 4
                                                textEncodingName:@"UTF-8"]
                             autorelease];
[self.client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed];
[self.client URLProtocol:self didLoadData: [@"Test" dataUsingEncoding:NSUTF8StringEncoding]];
[self.client URLProtocolDidFinishLoading: self];

Когда я читаю что-то с этим протоколом, я ожидаю получить ответ типа TestURLResponse, но в следующем коде я всегда получаю NSURLResponse:

    NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"test://test"]];
NSURLResponse* response;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];

NSString *className = NSStringFromClass([response class]);

UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:className  message:className delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
[alertView release];

Весь тестовый проект можно скачать по адресу

http://ul.to/9yylk65s

Прямо сейчас я понятия не имею, делаю ли я что-то неправильно или что-то сломано. Документация NSURLProtocol состояния

Разработчик протокола может захотеть создать пользовательский, изменяемый класс NSURLResponse для предоставления информации, специфичной для протокола.

но мне кажется, это совсем не работает.

...