2013-03-14 78 views
0

我试图用两种方式监视可重复性。连接到主机并连接到互联网。无论我想显示一个UIAlertView。目前这工作正常。当可达性连接丢失时显示警报视图

我想获得的是如果用户单击警报视图按钮,它再次检查可达性,但我不知道如何做到这一点。理想情况下,我不希望alertview消除并再次显示,但保持显示,并再次请求可达性检查。这可能吗?

这是我当前的appdelegate imp代码,用在appdelegate中,因为我想在此刻的任何时候检查连接。

- (void)monitorReachability { 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:ReachabilityChangedNotification object:nil]; 

    self.hostReach = [Reachability reachabilityWithHostName: @"api.parse.com"]; 
    [self.hostReach startNotifier]; 

    self.internetReach = [Reachability reachabilityForInternetConnection]; 
    [self.internetReach startNotifier]; 

} 

//Called by Reachability whenever status changes. 
- (void)reachabilityChanged:(NSNotification*)note { 
    NetworkStatus internetStatus = [self.internetReach currentReachabilityStatus]; 

    switch (internetStatus) { 
     case NotReachable: 
     { 
      isReachable=NO; 
      break; 
     } 
     case ReachableViaWiFi: 
     { 
      NSLog(@"The internet is working via WIFI."); 
      isReachable=YES; 
      break; 
     } 
     case ReachableViaWWAN: 
     { 
      NSLog(@"The internet is working via WWAN."); 
      isReachable=YES; 
      break; 
     } 
    } 

    NetworkStatus hostStatus = [self.hostReach currentReachabilityStatus]; 

    switch (hostStatus) { 
     case ReachableViaWWAN: 
     { 
      hostActive=YES; 
      break; 
     } 
     case ReachableViaWiFi: 
     { 
      hostActive=YES; 
      break; 
     } 
     case NotReachable: 
     { 
      hostActive=NO; 
      break; 
     } 

    } 


    if (hostActive == YES && isReachable == YES) { 
     connectionNotReachable.hidden = YES; 
    } 

    if (isReachable == NO) { 
     NSLog(@"Internet connection lost");\ 
     connectionNotReachable = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"connectionNotReachableTitle", @"Title for alert view - connection Not Reachable") message:NSLocalizedString(@"connectionNotReachableMessage", @"Message for alert view - connection Not Reachable") delegate:self cancelButtonTitle:nil otherButtonTitles:NSLocalizedString(@"connectionNotReachableTryAgain", @"Try again button for alert view - connection Not Reachable"), nil]; 

     [connectionNotReachable show]; 
     return; 
    } 

    if (hostActive == NO) { 
     NSLog(@"Host not active, internet connection"); 
     UIAlertView *hostNotReachable = [[UIAlertView alloc] initWithTitle:@"Host Not Reachable" message:@"No Host" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 
     [hostNotReachable show]; 
     return; 
    } 
} 
+0

http://stackoverflow.com/a/2051969/792677 – 2013-03-14 09:26:31

回答

0

您可以自定义AlertView您可以在其中实现这样

-(void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated { 
     if (![self connected]) 
      return; 
     [super dismissWithClickedButtonIndex:buttonIndex animated:animated]; 
    } 

,而你的方法警报已启动,您可以使用此方法自行检查连通性

- (BOOL)connected 
{ 
    Reachability *reachability = [Reachability reachabilityForInternetConnection]; 
    NetworkStatus networkStatus = [reachability currentReachabilityStatus]; 
    return !(networkStatus == NotReachable); 
} 

f inally看到if([self connected])则取消按钮

+0

请你详细说明上述请,我得到一个错误实现这一点。如果我没有理解这个权利,还有什么我应该设置的。 – StuartM 2013-03-14 19:10:29

+0

从我理解我必须创建UIAlertView的另一个文件子类,然后添加第一个方法。但是,上面的连接方法去了哪里?如果第一种方法是调用自连接,它不必在同一个文件中(UIAlertView子类)?然后我必须更新我的代码connectionNotReachable = [[SubclassedUIAlert alloc ...对吗? – StuartM 2013-03-14 19:24:11

+0

你可以放在任何地方,这种方法的目的是检查互联网可达性状态。并根据状态给予YES或NO! – nsgulliver 2013-03-14 19:30:56

1

基本上,你可以做的是禁用UIAlertView按钮,直到你再次访问网络。

[alert addButtonWithTitle:@"OK"]; 
UIButton *submitButton = [[alert subviews] lastObject]; 
[submitButton setEnabled: … ]; 

而且后您的连接是回来了,你只是做一次同样的事情:)

+0

,他不希望这一点;) – 2013-03-14 09:38:54

+1

您提供更好的解决方案,但并不意味着这是不他想要什么...... – bujarm 2013-03-14 09:45:33

+0

+1替代选项,我喜欢你的想法。虽然意图是有按钮作为再次尝试... – StuartM 2013-03-14 09:58:29