AppDelegate で SyncEngine を呼び出すアプリがあります。これにより、parse.com からデータをフェッチし、そのデータをローカル オブジェクトに解析して、その情報をデバイスのコア データ データベースに格納するプロセスが開始されます。
次に、アプリは、2 つのビュー コントローラーを含むタブバー コントローラーを読み込みます。
1) マップビュー コントローラ 2) テーブルビュー コントローラ
マップ ビュー コントローラーはコア データ データを配列に読み込み、それを使用してマップ上の位置をプロットします。tablevc は同じデータを取得し、それをセルに入れます。
アプリにインターネット接続をチェックさせ、フェッチされたかローカルかに応じてデータをロードしようとしています。契約は次のとおりです。
mapVC の viewDidLoad は、データの読み込みが完了したときの通知を登録します (Web から)。それが発生すると、CD フェッチ要求を実行する loadResultsFromCoreData メソッドを呼び出します。そのため、インターネット接続がない場合、その通知は受信されません。
私の質問は、いつ、どこでインターネット接続を確認するのに最適な場所ですか? これまでのところ AppDelegate でこのコードを使用していますが、もちろん、早すぎるため、BOOL は NO に設定されます。
- (BOOL) connectedToNetwork
{
Reachability *r = [Reachability reachabilityWithHostName:@"www.google.com"];
NetworkStatus internetStatus = [r currentReachabilityStatus];
BOOL internet;
if ((internetStatus != ReachableViaWiFi) && (internetStatus != ReachableViaWWAN)) {
internet = NO;
} else {
internet = YES;
}
return internet;
}
-(BOOL) checkInternet
{
//Make sure we have internet connectivity
if([self connectedToNetwork] != YES) {
UIAlertView *internetAlert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"Internet Required" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
[internetAlert show];
return NO;
} else {
return YES;
}
}
どんな助け:)