私は自分のプロジェクトにネットワークステータス通知を統合し、このためにAppleのReachabilityクラスを使用しました。それにもかかわらず、私は自分のコードにバグを見つけたかもしれないし、おそらくシミュレータ自体によっても引き起こされるかもしれない。AppleのReachabilityソースコードに重いバグがありますか? (reachabilityForLocalWiFi)
ここでコード:今すぐ
- (void)start {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(updateStatus:)
name:kReachabilityChangedNotification
object:nil];
Reachability *wifi = [[Reachability reachabilityForLocalWiFi] retain];
[wifi startNotifier];
}
- (void)updateStatus:(NSNotification *)notice {
NetworkStatus s = [[notice object] currentReachabilityStatus];
if(s == NotReachable) {
NSLog(@"Wifi not reachable");
} else {
NSLog(@"Wifi is reachable");
}
}
、 "開始" が呼び出されたときに何が起こるか:
1)UpdateStatusをメッセージが発射されていない - 大丈夫、バグではないかもしれないが、多分それはあります
2)Macの空港をオフにしてからnetworkstatusをeqにすると、updateStatusメッセージが表示されます。私は再び上でMacの空港の電源を入れたときに「NotReachable」するのではなく、UpdateStatusをメッセージが解雇され、NETWORKSTATUSは「NotReachable」ステー
私は状況に個別のリクエストをして、startメソッドでタイマーを追加- (void)start {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(updateStatus:)
name:kReachabilityChangedNotification
object:nil];
Reachability *wifi = [[Reachability reachabilityForLocalWiFi] retain];
[wifi startNotifier];
/* Added */
[NSTimer scheduledTimerWithTimeInterval:0.5F target:self selector:@selector(updateSeparately:) userInfo:nil repeats:YES];
/* * */
}
と "updateSeparately" 方法自体
/* Added */
- (void)updateSeparately:(NSTimer *)timer {
NetworkStatus s = [[Reachability reachabilityForLocalWiFi] currentReachabilityStatus];
if(s == NotReachable) {
NSLog(@"updateSeparately:Wifi not reachable");
} else {
NSLog(@"updateSeparately:Wifi is reachable");
}
}
/* * */
は私に次のシナリオのためのコンソールで次の出力を与える:
1)のAirMacがオンになって、私はこれはまだ )のAirMacがオフされた後、私は再びそれをオン(アプリケーション正しいと思わアプリを起動し、
...
2011-07-21 09:41:41.242 MyProject[7091:207] updateSeparately:Wifi is reachable
2011-07-21 09:41:41.742 MyProject[7091:207] updateSeparately:Wifi is reachable
2011-07-21 09:41:42.242 MyProject[7091:207] updateSeparately:Wifi is reachable
2011-07-21 09:41:42.264 MyProject[7091:207] --- Status Change ---
2011-07-21 09:41:42.265 MyProject[7091:207] Wifi not reachable
2011-07-21 09:41:42.743 MyProject[7091:207] updateSeparately:Wifi not reachable
2011-07-21 09:41:43.243 MyProject[7091:207] updateSeparately:Wifi not reachable
2011-07-21 09:41:43.743 MyProject[7091:207] updateSeparately:Wifi not reachable
...
オフのAirMacをオンランニング)
...
2011-07-21 09:45:42.702 MyProject[7133:207] updateSeparately:Wifi not reachable
2011-07-21 09:45:43.202 MyProject[7133:207] updateSeparately:Wifi not reachable
2011-07-21 09:45:43.701 MyProject[7133:207] updateSeparately:Wifi not reachable
2011-07-21 09:45:43.795 MyProject[7133:207] --- Status Change ---
2011-07-21 09:45:43.795 MyProject[7133:207] Wifi not reachable
2011-07-21 09:45:44.200 MyProject[7133:207] updateSeparately:Wifi not reachable
2011-07-21 09:45:44.700 MyProject[7133:207] updateSeparately:Wifi not reachable
2011-07-21 09:45:45.200 MyProject[7133:207] updateSeparately:Wifi not reachable
2011-07-21 09:45:45.701 MyProject[7133:207] updateSeparately:Wifi is reachable
2011-07-21 09:45:46.201 MyProject[7133:207] updateSeparately:Wifi is reachable
2011-07-21 09:45:46.701 MyProject[7133:207] updateSeparately:Wifi is reachable
...
これはNetworkStatus変更が注目されていることを示して....しかし、なぜそれが約2秒間「NotReachable」に滞在しますか?
誰でも説明がありますか?
PS。同じことは、Appleの到達可能性のサンプルプロジェクト(利用可能ここではhttp://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html)で読書のための
おかげで、
マイザー
あなたは端末で実行しようとしましたか? – bobbypage