用下面的代碼,如果沒有互聯網連接,故障塊會立即觸發 - 這很好。但是如果有連接但沒有互聯網呢?如何在AFNetworking的AFHTTPSessionManager中超時或檢測響應速度慢?
我讀過這個問題:How to set a timeout with AFNetworking它建議使用reachabilityManager和本答案中的示例顯示使用 - AFNetworking 2.0 queue request when device is offline with setReachabilityStatusChangeBlock does nothing。但是,如果我的模擬器或手機連接到我的wifi網絡,但沒有互聯網接入(DNS,DHCP或調制解調器問題),我的代碼目前仍然試圖長時間達到我的API。我沒有下載任何東西,我知道我的腳本,我的服務器應該在幾秒鐘內做出響應,所以我知道5秒鐘不活動之後,有些事情是錯誤的。
因此,我可以安全地做一個超時,或者我可以在我的當前腳本中使用reachabilityManager來檢測腳本(不是互聯網)是否無法訪問,如果是這樣,如何?
- (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
}];
}
「我知道我的劇本,我的服務器應該在幾秒鐘內作出迴應」>你也沒辦法讓移動網絡上這樣的假設...... 3G /邊緣可能很慢 –
轉到橋下,進入老酒吧在大建設,你可能有一個非常緩慢的數據連接。所以你會阻止訪問你的用戶? – Larme
我知道我在壞習慣的錯誤一面,但我寧願我的用戶得到一個超時,然後經歷與服務器通信的異常長時間的嘗試。 – Warren