私のiphoneアプリは非常にシンプルで、すべてを処理する1つのビューがあります。viewDidLoadで、インターネットに接続されているかどうかを確認します。インターネットに接続されているかどうかを確認します。接続されている場合はWebからロードし、そうでない場合はローカルリソースからロードします。そして、これはうまくいきます。
//in viewDidOnload
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleNetworkChange:)
name:kReachabilityChangedNotification object:nil];
reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];
NetworkStatus status = [reachability currentReachabilityStatus];
if (status == NotReachable) {
//Do something offline
} else {
//Do sometihng on line
}
- (void)handleNetworkChange:(NSNotification *)notice{
NetworkStatus status = [reachability currentReachabilityStatus];
if (status == NotReachable) {
//Change to offline Message
} else {
//Relaunch online application
}
}
handleNetworkChangeイベントをテストするために、すべてのセルラーデータをオフにしましたが、wifiはオンのままにしました。Wi-Fiの範囲内でアプリを起動しましたが、すべてが完璧に機能します。次に、wifiの範囲外を歩きますが、handleNetworkChangeが起動しません(uiAlertViewを使用してテスト済み)。Wi-Fiの範囲外に立つと、アプリはオフラインメッセージを正常に起動します。
私の疑惑は、これがViewControllerのライフサイクルの問題であるということですが、このコードをAppDelegate関数に配置する必要がありますか?おそらく、それは最初からより良い設計です。