Я переопределяю NSURLProtocol и вам нужно вернуть HTTP-ответ с определенным кодом состояния. NSHTTPURLResponse не StatusCode сеттера, поэтому я попытался изменить его с помощью:Как установить statusCode в NSURLResponse
@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 всегда имеет статусCode = 0 на веб-странице. В то же время ответы, которые возвращаются из сети NSURLConnection, имеют нормальные ожидаемые коды состояния.
Может кто-нибудь может помочь с идеями, как установить statusCode явно для созданного NSURLResponse? Thanx.
Вы нашли решение этой проблемы? – TomSwift 2011-01-31 23:21:10