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];

テスト プロジェクト全体は、次の URL からダウンロードできます。

http://ul.to/9yylk65s

今のところ、何か間違ったことをしているのか、それとも何かが壊れているのかわかりません。NSURLProtocol 状態のドキュメント

プロトコルの実装者は、カスタムの変更可能な NSURLResponse クラスを作成して、プロトコル固有の情報を提供することを希望する場合があります。

しかし、私には、これはまったく機能していないようです。

4

0 に答える 0