我的应用程序使用后台 GCD 队列中的同步 NSURLConnection 从 Web 服务检索货币汇率,如下所示:
// This method is called in background queue
- (NSData*)fetchDataWithURLStr:(NSString*)urlStr {
NSData *jsonData = nil;
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
NSURL *url = [NSURL URLWithString:urlStr];
NSURLResponse *response = nil;
NSError *error = nil;
NSURLRequest *request = [NSURLRequest requestWithURL:url];
jsonData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if (error != nil) {
NSString *errorMsg = nil;
NSInteger ec = [error code];
if (ec == NSURLErrorTimedOut || ec == NSURLErrorCannotConnectToHost) {
errorMsg = @"Data temporarily not available.";
}
// Call on main thread
dispatch_async(dispatch_get_main_queue(), ^{
// Present the error
[self showErrorWithCode:ec title:@"ERROR" message:errorMsg];
});
jsonData = nil;
}
return jsonData;
}
但问题通常是应用程序试图获取数据,并且下载似乎永远运行并且没有任何反应。没有状态更新什么都没有。通常我的 WiFi 只是停滞不前,我必须转到设置,禁用并重新启用它。或者我家中的 WiFi 路由器的互联网连接已关闭,但设备已连接到 WiFi。
我真正想做的是对网络上正在发生的事情给出准确的反馈。例如
“正在尝试联系服务器……”“等待……仍在尝试……”“您的互联网似乎坏了……”“重试……”“收到响应……”“已下载 20%”“已下载” 40%” “完成!”
只是关于正在发生的事情的准确反馈。
有人推荐了 MKNetworkKit,但感觉就像死了一样,没有任何反馈。
是否有适用于 iOS 的此问题的解决方案?
编辑:我有可达性,但它没有给我这种我想在联网期间显示的反馈。此外,当有 WiFi 连接但互联网停止时,可达性并没有告诉我发生了什么。