В настоящее время я использую класс с помощью достижимости apple.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, поэтому я не очень разбираюсь в этом вопросе.
EDIT:
Вот моя функция 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;
}
}
}