5

我尝试在我的自定义 NSURLProtocol 中返回 NSURLResponse 子类的对象,但似乎返回的响应总是由普通的 NSURLResponse 交换。

这是我返回自定义 TestURLResponse 的 NSURLProtocol 的一部分:

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 类来提供协议特定的信息。

但在我看来,这根本行不通。

4

0 回答 0