В настоящее время я использую класс apple reachability.m /. h, и он работает, за исключением того, что он уведомляет меня о любых изменениях, в то время как я хотел бы уведомлять пользователя только в том случае, если сеть недоступна. В настоящее время, если у меня есть подключение к Интернету, а затем я теряю сеть, он сообщает мне. Однако при повторном подключении к сети он также сообщает мне, что я не хочу. Я хочу, чтобы он сообщал мне только о потере / отсутствии сети.
Я считаю, что это как-то связано с вызовом:
- (void)viewWillAppear:(BOOL)animated
{
// check for internet connection
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(checkNetworkStatus:)
name:kReachabilityChangedNotification
object:nil];
internetReachable = [[Reachability
reachabilityForInternetConnection] retain];
[internetReachable startNotifier];
// check if a pathway to a random host exists
hostReachable = [[Reachability reachabilityWithHostName:
@"www.google.ca"] retain];
[hostReachable startNotifier];
// now patiently wait for the notification
}
при вызове - [NSNotificationCenter addObserver: selector: name: object:]
, имеет ли имя какую-либо другую функцию, кроме как буквального имени? Я впервые использую NSNotificationCenter, поэтому я плохо разбираюсь в этом вопросе.
РЕДАКТИРОВАТЬ:
Вот моя функция checkNetworkStatus: (Проблема в том, что я получаю "NotReachable" когда сетевое соединение восстанавливается и NSAlert отключается несколько раз)
- (void) checkNetworkStatus:(NSNotification *)notice
{
// called after network status changes
NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
switch (internetStatus)
{
case NotReachable:
{
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Network Failed" message:@"Please check your connection and try again." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil ];
[alert show];
NSLog(@"The internet is down.");
break;
}
case ReachableViaWiFi:
{
NSLog(@"The internet is working via WIFI.");
break;
}
case ReachableViaWWAN:
{
NSLog(@"The internet is working via WWAN.");
break;
}
}
NetworkStatus hostStatus = [hostReachable currentReachabilityStatus];
switch (hostStatus)
{
case NotReachable:
{
NSLog(@"A gateway to the host server is down.");
break;
}
case ReachableViaWiFi:
{
NSLog(@"A gateway to the host server is working via WIFI.");
break;
}
case ReachableViaWWAN:
{
NSLog(@"A gateway to the host server is working via WWAN.");
break;
}
}
}