AFNetworking 2.0 可达性警报始终显示
Posted
技术标签:
【中文标题】AFNetworking 2.0 可达性警报始终显示【英文标题】:AFNetworking 2.0 Reachability alert always showing 【发布时间】:2015-02-12 07:12:31 【问题描述】:我正在使用 AFNetworking 2.0 进行网络调用。我正在使用下面的代码来实现可访问性。我的问题是当我打开应用程序时总是显示“未连接”警报。该应用程序似乎需要一段时间才能连接到网络,并且延迟导致警报弹出。有没有什么办法解决这一问题?我不希望每次都弹出“未连接”警报并让用户感到困惑。
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status)
NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));
switch (status)
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"No Internet Connection");
UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Not connected"
message:@"You have no network connection"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[message show];
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"WIFI");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"4G");
break;
default:
NSLog(@"Unkown network status");
break;
];
[[AFNetworkReachabilityManager sharedManager]startMonitoring];
if ([[AFNetworkReachabilityManager sharedManager] isReachable] == NO)
UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Not connected"
message:@"You're not connected to the internet. Please connect via WiFi or data plan"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[message show];
//this shows all the time - why?
【问题讨论】:
【参考方案1】:将此代码放入您的AppDelegate
在此方法didFinishLaunchingWithOptions
中。它只会显示一次消息。
internetReachableFoo = [Reachability reachabilityWithHostname:@"www.google.com"];
internetReachableFoo.reachableBlock = ^(Reachability*reach)
dispatch_async(dispatch_get_main_queue(), ^
NSLog(@"Yayyy, we have the interwebs!");
);
;
internetReachableFoo.unreachableBlock = ^(Reachability*reach)
dispatch_async(dispatch_get_main_queue(), ^
UIAlertView *alrt=[[UIAlertView alloc]initWithTitle:@"Error" message:@"No Internet Connection\nPlease Check The Connection" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alrt show];
);
;
[internetReachableFoo startNotifier];
【讨论】:
【参考方案2】:因为 AFNetworkReachabilityManager 通过通知刷新其状态。 所以当你打电话时
[AFNetworkReachabilityManager sharedManager] isReachable]
立即开始监控后,状态未准备好。
【讨论】:
我尝试将警报放在不同的位置,以便它有机会做好准备,但我仍然收到警报。这有什么好的做法?以上是关于AFNetworking 2.0 可达性警报始终显示的主要内容,如果未能解决你的问题,请参考以下文章
AFNetworking 2.0。如何检查套接字的可达性状态(managerForAddress :)?
AFNetworking 2.0:isReachable 总是返回 False
防止在首次启动 iOS 时调用 AFNetworking 可达性状态