检查 iPhone 上的互联网连接并监控变化
Posted
技术标签:
【中文标题】检查 iPhone 上的互联网连接并监控变化【英文标题】:Check internet connection on iPhone and monitor changes 【发布时间】:2011-12-31 19:08:02 【问题描述】:我已经按照this answer 实现了可达性类。 我有两个不同的问题,希望对您有所帮助...
我已将通知程序放在我的 viewDidLoad 中:
(void)viewDidLoad
[super viewDidLoad];
// check for internet connection
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil];
internetReachable = [Reachability reachabilityForInternetConnection];
[internetReachable startNotifier];
// check if a pathway to a random host exists
hostReachable = [Reachability reachabilityWithHostName: @"www.apple.com"];
[hostReachable startNotifier];
然后我在 viewDidAppear 中检查互联网连接:
(void)viewDidAppear:(BOOL)animated
[super viewDidAppear:animated];
//check connection when access to the view
if (internetActive)
[self loadData];
else
UIAlertView * errorAlert = [[UIAlertView alloc] initWithTitle:@"Error loading content" message:@"Internet connection not available" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[errorAlert show];
第一个问题:第一次如何检查互联网连接
我第一次访问视图时,会显示警报,如果互联网连接正常也是如此。我认为这是因为通知者尚未收到有关连接的通知。如何管理?
第二个问题:如果连接状态发生变化(即从不存在变为存在),通知者不会就此提供建议
如果我在没有互联网连接的情况下启动应用程序,警报会正确显示。但是,如果互联网再次可用,则每次我访问视图时都会继续显示警报,因为不会拦截互联网可用性的变化。我认为这是由于在同一线程上执行通知程序。如何实现此连接检查以拦截连接状态变化?
提前致谢,新年快乐, 亚萨
【问题讨论】:
你应该看看Reachability without the suck。 【参考方案1】:您的怀疑是正确的,viewDidLoad
和viewDidAppear
方法在同一个运行循环中被调用是很常见的,这意味着您在viewDidAppear
之前不会收到任何通知。
编辑 我不确定这是否可行,因为我现在没有 xcode:
在收到任何通知之前,请尝试使用[internetReachable currentReachabilityStatus]
和[hostReachable currentReachabilityStatus]
检查当前状态。
如果您的代码仍然与 the answer you linked 相同,只需在您的 viewDidLoad
或 viewDidAppear
中调用 [self checkNetworkStatus:nil]
,然后再检查 internetActive
标志
【讨论】:
非常感谢您的提示!!!更改- (void)viewDidAppear:(BOOL)animated [super viewDidAppear:animated]; //check connection when access to the view //if (internetActive) if ([internetReachable currentReachabilityStatus])
对我来说效果很好!!!以上是关于检查 iPhone 上的互联网连接并监控变化的主要内容,如果未能解决你的问题,请参考以下文章