Я хотел интегрировать уведомление о сетевом статусе в свой проект и использовать для этого класс достижимости Яблок. Тем не менее, я мог бы найти ошибку в своем коде или, возможно, также вызван самим симулятором.Тяжелая ошибка в исходном коде Apple? (достижимостьForLocalWiFi)
код здесь:
- (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) сообщение updateStatus увольняется, когда я выключаю свой Mac-сервер, а затем networkstatus является экв. к «NotReachable», НО когда я включаю аэропорт Мака снова сообщение UpdateStatus уволит И NETWORKSTATUS ОСТАЕТСЯ «NotReachable»
Когда я добавляю в способе запуска таймер, делая отдельные запросы о состоянии
- (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) AirPort включен, я запустить приложение и включите AirPort от
...
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
...
это кажется правильным
2) после того, как AirPort выключен, я снова включите его (App еще бег)
...
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 было замечено .... но почему это остаться «NotReachable» в течение ~ 2 секунд?
У кого-нибудь есть объяснение?
PS. То же самое происходит и в Sample Project достижимости в компании Apple (доступна здесь http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html)
Спасибо за чтение,
Mizer
Вы пробовали работать на устройстве? – bobbypage