2011-06-11 45 views
0

寻找答案时,一些人注意到了这个问题,但没有人解决它。我只是想让用户知道是否发生了网络连接更改(即网络丢失)。下面的代码工作,但我得到多个警报,通常是3.我明白为什么它可能发生的原因是因为多个内部呼叫的准确性,但我似乎无法只有一个警报显示,那就是。我试图用BOOL来检测警报是否已经显示(alertshowing),但它仍然没有帮助。 感谢您的想法。iPhone多次警报通过网络连接检查调用

- (void)applicationDidBecomeActive:(UIApplication *)application { 
    ////NSLog(@"DidBecomeActive"); 

    [self performSelector:@selector(getNetworkConnection) withObject:nil afterDelay:5.0]; 

} 


-(void)getNetworkConnection 
{ 
    Reachability *r = [Reachability reachabilityWithHostName:@"www.google.com"]; 

    NetworkStatus internetStatus = [r currentReachabilityStatus]; 

     if ((internetStatus != ReachableViaWiFi) && (internetStatus != ReachableViaWWAN)) 
     { 
      if (!self.alertShowing) { 
      UIAlertView *myAlert = [[[UIAlertView alloc] initWithTitle:@"No Internet Connection" message:@"This app require an internet connection via WiFi or cellular network to work." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil] autorelease]; 
      self.alertShowing = YES; 
      [myAlert show]; 
      } 
     }  
} 

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 
    self.alertShowing = NO; 
} 
+0

我的道歉,对这个问题进行了标记,我不知道如何解决它。 – lionz 2011-06-11 20:12:41

+0

使用标签下方的小编辑按钮编辑您的问题。 – PengOne 2011-06-11 20:47:17

+0

我想出了它,并且将观察者放置在两个点中并多次调用可达性是错误的。本周我一直在盯着代码太久。 – lionz 2011-06-11 23:25:40

回答

1
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNetworkChange:) name:kReachabilityChangedNotification object:nil]; 

上面的代码线只应调用为整个应用程序一次。
如果您在多次调用的函数中调用此行代码,该通知还会显示许多警报。

因此,我建议您创建一个单一类,它将在整个应用程序中生效,并在创建单例类对象的区域中调用上面的代码行。

注: - 上面的代码行应该是整个应用程序只有一次调用