Как установить statusCode в NSURLResponse

Я переопределяю NSURLProtocol и мне нужно вернуть HTTP-ответ с определенным statusCode. NSHTTPURLResponse не имеет установщика statusCode, поэтому я попытался переопределить его с помощью:

@interface MyHTTPURLResponse : NSHTTPURLResponse {} 

@implementation MyHTTPURLResponse

    - (NSInteger)statusCode {
        return 200; //stub code
    }
@end

Переопределенный метод startLoading NSURLProtocol выглядит следующим образом:

-(void)startLoading
{   
   NSString *url = [[[self request] URL] absoluteString];
   if([url isEqualToString:SPECIFIC_URL]){
       MyURLResponse *response = [[MyURLResponse alloc] initWithURL:[NSURL URLWithString:@"http://fakeUrl"]
       MIMEType:@"text/plain"
       expectedContentLength:0  textEncodingName:nil];

       [[self client] URLProtocol:self     
            didReceiveResponse:response 
            cacheStoragePolicy:NSURLCacheStorageNotAllowed];

       [[self client] URLProtocol:self didLoadData:[@"Fake response string"
            dataUsingEncoding:NSASCIIStringEncoding]];

       [[self client] URLProtocolDidFinishLoading:self];                

       [response release];

    }
    else{   
        [NSURLConnection connectionWithRequest:[self request] delegate:self];   
    }
}

Но этот подход не работает, ответ, созданный в NSURLProtocol, всегда имеет statusCode = 0 на веб-странице. В то же время ответы, возвращаемые из сети NSURLConnection, имеют нормальные ожидаемые коды состояния.

Кто-нибудь может помочь с идеями, как явно установить код состояния для созданного NSURLResponse? Спасибо.

10
задан okonov 8 December 2010 в 02:47
поделиться