В настоящее время я использую класс 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;
}
}
}