当互联网可用时,是否可以在我的应用程序内收到通知或其他内容。我知道可达性和各种东西。但是我想要的是当设备上的互联网可用时启动一些挂起的 NSUrlConnections。有没有一种简单的方法可以做到这一点,因为我不想使用一个不断检查可达性的循环线程。有什么建议么?
问问题
4925 次
2 回答
2
好的,这是关于可达性的非常好的帖子:http: //www.mikeash.com/pyblog/friday-qa-2013-06-14-reachability.html(查看下面的评论!)
Tldr:您可以在连接时触发阻止回来了,但这个解决方案并不完美。没有 100% 可靠的方法可以做到这一点(循环尝试除外),但您可以尝试混合使用这些方法。
编辑:评论@Jonah.at.GoDaddy 答案:
可达性可以给你两个连接通知错误:误报和误报(你可以在 WWDC 2011 会议上检查它,我不记得是哪一个;有两个关于网络) . 所以,我的观点是:你永远不应该只依赖那些通知。您可以在状态更改时触发刷新,但应该有另一种方式(用户交互或某种主动等待)。
于 2013-11-01T20:07:09.487 回答
0
这是我使用的一些代码......它可能比你需要的多一点:
-(void)checkNetworkStatus
{
// check for internet connection
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil];
// check if a pathway to a random host exists
self.hostReachable = [Reachability reachabilityWithHostname:@"google.com"];
[self.hostReachable startNotifier];
}
-(void) checkNetworkStatus:(NSNotification *)notice
{
NetworkStatus hostStatus = [self.hostReachable currentReachabilityStatus];
switch (hostStatus)
{
case NotReachable:
{
DDLogInfo(@"A gateway to the host server is down.");
if( self.canReachGoogle )
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: LOCALIZED_NoInternetConnection
message: LOCALIZED_ConnectionNeeded
delegate:self cancelButtonTitle:LOCALIZED_Ok otherButtonTitles:nil];
[alert show];
}
self.canReachGoogle = NO;
break;
}
case ReachableViaWiFi:
{
DDLogInfo(@"A gateway to the host server is working via WIFI.");
self.canReachGoogle = YES;
break;
}
case ReachableViaWWAN:
{
DDLogInfo(@"A gateway to the host server is working via WWAN.");
self.canReachGoogle = YES;
break;
}
}
DDLogInfo(@"Network connection has changed and is now: %@", self.canReachGoogle ? @"enabled" : @"disabled" );
}
于 2013-11-01T21:33:25.677 回答