iOS应用程序没有互联网连接时如何禁用segue?

Posted

技术标签:

【中文标题】iOS应用程序没有互联网连接时如何禁用segue?【英文标题】:How to disable segue when there is no internet connection for iOS app? 【发布时间】:2015-07-30 10:27:23 【问题描述】:

为了检查互联网连接,我正在考虑通过 AppDelegate 更新:

    SystemConfiguration.framework 可达性.h

为了停止 segue,我正在考虑使用:

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender

我只想在用户点击 UIButton 时显示没有互联网连接的警报。

我到底应该怎么做

- (void)prepareForSegue:(NSStoryboardSegue *)segue sender:(id)sender

我已在每个要实施互联网连接检查的 ViewController 中的 viewDidLoad 方法下注册通知

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

可达性改变

- (void) reachabilityChanged: (NSNotification* )note

    Reachability* curReach = [note object];
    NSParameterAssert([curReach isKindOfClass: [Reachability class]]);

    NetworkStatus netStatus = [curReach currentReachabilityStatus];
    switch (netStatus)
    
        case ReachableViaWWAN:
        
            break;
        
        case ReachableViaWiFi:
        
            break;
        
        case NotReachable:
        
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"We are unable to make a internet connection at this time. Some functionality will be limited until a connection is made." delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
            [alert show];   
            [alert release];
            break;
        
    

【问题讨论】:

您无需在prepareForSegue 中执行任何操作。如果没有 Internet 连接,您需要做的就是从 shouldPeformSegue 返回 false - 您可以使用可达性通知方法中设置的布尔属性。 【参考方案1】:

在你的类接口中,声明:

@property (nonatomic) BOOL isReachable;

在你的reachabilityChanged 方法中:

- (void)reachabilityChanged: (NSNotification* )note

    Reachability* curReach = [note object];
    NSParameterAssert([curReach isKindOfClass: [Reachability class]]);

    NetworkStatus netStatus = [curReach currentReachabilityStatus];
    switch (netStatus)
    
        case ReachableViaWWAN:
         
            self.isReachable = YES;
            break;
        
        case ReachableViaWiFi:
        
            self.isReachable = YES;
            break;
        
        case NotReachable:
        
            self.isReachable = NO;
            break;
        
    

然后,在 shouldPerformSegueWithIdentifier 方法中检查是否连接到互联网。

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender

  if ([identifier isEqualToString:YOUR_IDENTIFIER]) 
    if (!self.isReachable) 
       return NO;
    
  
return YES;

【讨论】:

谢谢。当我在 MacBook Air 上关闭 WiFi 时,该应用程序可以完美检测(通知: NotReachable )。但是当我重新打开它时,它仍然会使用 NotReachable 发布通知。知道可能出了什么问题吗? 我建议你在真实设备中尝试可达性。有时模拟器在可达性方面表现不佳。如果问题仍然存在,请告诉我。

以上是关于iOS应用程序没有互联网连接时如何禁用segue?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据网络连接进行segue?

如何在swift 3.0中隐藏连接的segue中的标签栏

在执行自定义 segue 之前禁用工具栏 UIBarButtonItem

禁用转场动画

IOS开发。如何通过 segue 连接不同故事板中的两个场景

在 twitter iOS 应用程序中,segue 没有在视觉上执行