0

我正在使用 AFNetworking 类与 Web 服务进行交互。我在这方面遇到了一些问题。

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]initWithRequest:theRequest];// using AFHTTPRequestOperation to request Data
[operation setRedirectResponseBlock:^NSURLRequest *(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse) {
        NSLog(@"connection :%@",connection);

        NSLog(@"request :%@",request);

        NSLog(@"response :%@",redirectResponse); question 1:? i get NSURLResponse value is null. output:response :(null)

        return request;

    }];

在断点的帮助下,我检查了 AFNetworking 类(类名:AFURLConnectionOperation.m)是否从服务器获得响应?是的,它得到了回应。

- (void)setRedirectResponseBlock:(NSURLRequest * (^)(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse))block {

    self.redirectResponse = block;

    NSLog(@"connection :%@",_connection);

    NSLog(@"request :%@",_request);

    NSLog(@"response :%@",_redirectResponse);//getting NSURLResponse from server.(its showing response)  output: response :<__NSGlobalBlock__: 0x46238>

    NSLog(@"block :%@",block);

}

我的问题是,当我在我的类 NSURLResponse *redirectResponse 中调用 [operation setRedirectResponseBlock.....] 时总是有空值但是当我签入时 - (void)setRedirectResponseBlock..... 在 AFURLConnectionOperation.m 类 NSURLResponse *redirectResponse有一定的价值。你能帮忙知道我错在哪里。上周一整天我都在谷歌上搜索,我找不到任何与此相关的答案。

我正在使用“theRequest.cachePolicy = NSURLRequestUseProtocolCachePolicy;” 因为我不想一直从服务器加载,只有在标题中有任何修改时,我才想再次调用。为此,我需要使用“setRedirectResponseBlock”来编写下面的代码。

if ([response isKindOfClass:[NSHTTPURLResponse self]]) {

NSDictionary *headers = [(NSHTTPURLResponse *)response allHeaderFields];

NSString *modified = [headers objectForKey:@"Last-Modified"];


if (modified) { .......

请帮我解决这个问题,非常感谢示例。

4

1 回答 1

2

根据相应委托方法的文档,connection:willSendRequest:redirectResponse:

由于在发送请求之前修改了请求,委托可以接收此消息,例如将请求的 URL 转换为其规范形式。要检测这种情况,请检查 redirectResponse;如果为 nil,则由于重定向而未发送消息。

于 2013-07-25T15:01:44.597 回答