使用下面的代码,如果没有互联网连接,则会立即触发故障块 - 这很好.但如果有连接但没有互联网怎么办?
我已经读过这个问题:如何使用AFNetworking设置超时,建议使用reachabilityManager,本答案中的示例显示了使用 - 当设备离线时,AFNetworking 2.0队列请求与setReachabilityStatusChangeBlock无关.
但是,如果我的模拟器或手机连接到我的wifi网络但没有互联网访问(DNS,DHCP或调制解调器问题),我的代码目前仍在尝试长时间访问我的API.我没有下载任何东西,我知道我的脚本和我的服务器应该在几秒钟内响应所以我知道在5秒不活动后,出了点问题.
那么我可以安全地执行超时,或者我可以在当前脚本中使用reachabilityManager来检测脚本(而不是Internet)是否无法访问,如果是,如何执行?
- (void)APICall:(NSMutableDictionary*)params { NSURL *baseURL = [NSURL URLWithString:BaseURLString]; NSDictionary *parametersGetAuthCode = @{@"req": @"getauth"}; AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL]; manager.responseSerializer = [AFJSONResponseSerializer serializer]; [manager POST:APIscript parameters:parametersGetAuthCode success:^(NSURLSessionDataTask *task, id responseObject) { if ([task.response isKindOfClass:[NSHTTPURLResponse class]]) { NSHTTPURLResponse *r = (NSHTTPURLResponse *)task.response; if ([r statusCode] == 200) { //do success stuff } } } failure:^(NSURLSessionDataTask *task, NSError *error) { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alertView show]; //do failure stuff }]; }
race_carr.. 20
只需确定您的应用程序的合理超时间隔,并将其设置在AFHTTPSessionManager请求序列化程序上.
[manager.requestSerializer setTimeoutInterval:20.0];
在UI中添加内容,例如UIActivityIndicatorView或"Downloading ..."消息,以便用户知道发生了什么.
只需确定您的应用程序的合理超时间隔,并将其设置在AFHTTPSessionManager请求序列化程序上.
[manager.requestSerializer setTimeoutInterval:20.0];
在UI中添加内容,例如UIActivityIndicatorView或"Downloading ..."消息,以便用户知道发生了什么.