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 之前禁用工具栏 UIBarButtonItem