私のアプリは、次のように、バックグラウンド 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 接続はあるがインターネットが停止している場合、到達可能性は何が起こっているかを教えてくれません。