Iphone 返回自定义NSURLResponse类

Iphone 返回自定义NSURLResponse类,iphone,objective-c,nsurlconnection,nsurlprotocol,Iphone,Objective C,Nsurlconnection,Nsurlprotocol,我尝试在自定义NSURLSeprotocol中返回NSURLResponse子类的对象,但返回的响应似乎总是由正常的NSURLSponse交换 这是NSURLProtocol的一部分,我在其中返回自定义TestURLResponse: TestURLResponse* response = [[[TestURLResponse alloc] initWithURL: [[self request] URL]

我尝试在自定义NSURLSeprotocol中返回NSURLResponse子类的对象,但返回的响应似乎总是由正常的NSURLSponse交换

这是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];
    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];
当我阅读使用此协议的内容时,我希望得到TestURLResponse类型的响应,但在以下代码中,我总是得到一个NSURLRResponse:

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];
    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];
整个测试项目可在以下网址下载:

现在我不知道我是做错了什么,还是有什么东西坏了。NSURL议定书国家的文件

协议实现者可能希望创建一个定制的、可变的NSURLResponse类来提供特定于协议的信息


但在我看来,这根本不起作用。

我对此感到非常困惑。我下载了您的项目并尝试了一些事情,比如实现
-(id)initWithCoder:
-(id)copy
/
-(id)copyWithZone:
,但没有任何帮助。该对象在传递到url协议客户端时也不会被保留。还使用了示例代码,但没有得到任何结果。由于向连接委托发送了一个完全不同的响应对象,我想这可能与NSURLResponse的默认
-copyWithZone:
行为有关,但它甚至没有被调用。也许这是苹果NSURLProtocolClient实现中的一个bug?谢谢你的评论。我花了一整天的时间试图找到交换回复的地方,但什么也没找到。现在,我还认为这可能是苹果的实现或他们的文档中的一个bug。也许我应该在苹果开发者论坛上问一下,试着从苹果那里找到一个可以解释这一点的人。我在苹果公司提交了一个关于这个问题的bug,因为在苹果开发者论坛上也没有人发现这个问题有错。如果我找到了解决方案或解决方法,我会将其添加到这里。