[XCODE] ネットワークが圏外になったり、圏外から圏内に変わった事をアプリ上で知る方法
こんにちは、iPhoneアプリを絶賛開発中の@yoheiMuneです。
今日は、外部サーバーを使うアプリとかで、ネットワークが圏外になったり、圏外から復活した際に、 通知を受けて、処理を停止/再開を行えるようにする仕組みを紹介したいと思います(⌒▽⌒)

Reachabilityの導入方法は、こちらを参照頂けると幸いです(*´∇`*)
- [XCODE] ネットワーク接続が3GかWifiか圏外かを調べる簡単な方法@YoheiM.NET
上記リンク先の記事では、ネットワーク状態を知りたい時に、 アプリ側から問い合わせをするPull型の実装を紹介しましたが、今回は、 Push型の実装で、アプリ側からわざわざ問い合わせなくてもネットワーク状態の変化を教えてくれる 方法となります。
具体的な実装内容は、以下となります。
(Reachabilityのインスタンス化と、Notificationの設定)
(通知を受け取るメソッドでの実装例)
- Reachability.hのコメント部分
- NSNotificationCenter Class Reference
あとNSNotificationCenterって便利なクラスですね。ほぼ始めて使いましたが、簡単に使えて良かったです☆
今回も最後までお読み頂きまして、ありがとうございました!
今日は、外部サーバーを使うアプリとかで、ネットワークが圏外になったり、圏外から復活した際に、 通知を受けて、処理を停止/再開を行えるようにする仕組みを紹介したいと思います(⌒▽⌒)

利用する技術は、Reachabilityというクラスです
アップルから提供されているReachabilityというクラスを用いる事で、 現在のネットワーク状態を知ったり、ネットワーク状態が変わった際に通知を受ける事が可能です。Reachabilityの導入方法は、こちらを参照頂けると幸いです(*´∇`*)
- [XCODE] ネットワーク接続が3GかWifiか圏外かを調べる簡単な方法@YoheiM.NET
ネットワーク状態が変化した際に通知を受ける方法
通知を受ける為に、NSNotificationCenterの機能を利用します。上記リンク先の記事では、ネットワーク状態を知りたい時に、 アプリ側から問い合わせをするPull型の実装を紹介しましたが、今回は、 Push型の実装で、アプリ側からわざわざ問い合わせなくてもネットワーク状態の変化を教えてくれる 方法となります。
具体的な実装内容は、以下となります。
(Reachabilityのインスタンス化と、Notificationの設定)
// 例えば、通知を受けるクラスの初期化時に、Reachabilityの設定を行います。
-(id)init {
self = [superinit];
if (self) {
// Reachabilityのインスタンスを作成し、フィールド変数に代入します。
// インスタンス作成時に、どのサーバーとの通信状態を監視するかを
// 設定します。
reachability = [Reachability reachabilityWithHostName:@"www.google.com"];
// 続いて、NSNotificationCenterに、
// ネットワーク状態が変化した際に通知を受ける対象を指定します。
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(notifiedNetworkStatus:)
name:kReachabilityChangedNotification
object:nil];
// ネットワーク監視を開始します。
[reachability startNotifier];
}
return self;
}
(通知を受け取るメソッドでの実装例)
// 通知を受け取るメソッド
-(void)notifiedNetworkStatus:(NSNotification *)notification {
// reachability変数から、現在のネットワーク状態を取得します。
NetworkStatus networkStatus = [reachability currentReachabilityStatus];
// 受け取ったネットワーク状態に合わせて、処理を行います。
// 下記例の場合、wifiか3Gの状態になった場合には、startWorkを呼び出し、
// 圏外になったら、stopWorkを呼び出しています。
if (networkStatus == ReachableViaWiFi) {
NSLog(@"wifi");
} elseif (networkStatus == ReachableViaWWAN) {
NSLog(@"3G");
} else {
NSLog(@"does not connect.");
[self stopWork];
return;
}
[self startWork];
}
参考資料
今回の参考資料は、以下となります。より詳しい内容は、以下をご参照頂けると幸いです(・∀・)- Reachability.hのコメント部分
- NSNotificationCenter Class Reference
最後に
Reachabilityって便利なクラスですが、Cocoaフレームワークには入ってないのですね。不思議です。あとNSNotificationCenterって便利なクラスですね。ほぼ始めて使いましたが、簡単に使えて良かったです☆
今回も最後までお読み頂きまして、ありがとうございました!






