我正在尝试使用新的2.0 AFNetworking设置可达性。
在我的AppDelegate中,我初始化了sharedManager。
// Instantiate Shared Manager
[AFNetworkReachabilityManager sharedManager];
然后在相关的VC方法中,我检查是否isReachable:
// Double check with logging
if ([[AFNetworkReachabilityManager sharedManager] isReachable]) {
NSLog(@"IS REACHABILE");
} else {
NSLog(@"NOT REACHABLE");
}
目前这在模拟器中没有按预期工作,但我想这需要在设备上进行测试,而不是模拟器。
问题 我想要做的是监控VC内的连接。所以我在viewDidLoad中运行以下命令:
// Start monitoring the internet connection
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
我如何注册更改?一旦网络连接发生变化,将会调用什么/我将无法从文档中看到这一点。
答案 0 :(得分:43)
您可以阅读AFNetworking read me page
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));
}];
答案 1 :(得分:3)
我有一个单独的AFHTTPRequestOperationManager类。在单身人士中有一个方法:
+(void)connectedCompletionBlock:(void(^)(BOOL connected))block {
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
BOOL con = NO;
NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));
if (status == AFNetworkReachabilityStatusReachableViaWWAN || status == AFNetworkReachabilityStatusReachableViaWiFi) {
con = YES;
}
if (block) {
[[AFNetworkReachabilityManager sharedManager] stopMonitoring];
block(con);
}
}];
}
在发出请求之前,您调用此方法返回一个指示互联网是否可访问的块:
[TLPRequestManager connectedCompletionBlock:^(BOOL connected) {
if (connected) {
// Make a request
}else{
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Notice" message:@"Internet is not available." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
[alertView show];
}
}];
答案 2 :(得分:1)
我只是在回答你的问题和所有答案。在那之后,我决定做一次所有这些事情。所以,在我现有的项目中,我只是通过可可豆荚包含了AFNetworking,这里的解决方案完全可以帮我解决。
解决方案 - 首先,AFNetworkReachabilityManager是一个单例类。您不需要为sharedManager进行AppDelegate初始化。
{{1}}
因此,在这种情况下,每次设备连接到网络时,它将首先执行startMonitoring过程,然后每次都会点击状态块,并根据状态显示警报。
您可以通过替换状态块上的警报,根据您的选择执行任何操作。我使用它来自动从本地存储加载网页,但为了简单起见,我删除了该代码。
它甚至可以使用我的模拟器和Mac mini ..
由于
希望这会有所帮助。
答案 3 :(得分:1)
我在app delegate - >
中使用它 func reachablityCode() {
AFNetworkReachabilityManager.sharedManager()
AFNetworkReachabilityManager.sharedManager().startMonitoring()
AFNetworkReachabilityManager.sharedManager().setReachabilityStatusChangeBlock({(status) in
let defaults = NSUserDefaults.standardUserDefaults()
if status == .NotReachable {
defaults.setBool(false, forKey:REACHABLE_KEY)
}
else {
defaults.setBool(false, forKey: REACHABLE_KEY)
}
defaults.synchronize()
})
}
然后在基本文件中 - >
func isReachable() -> Bool {
return NSUserDefaults.standardUserDefaults().boolForKey(REACHABLE_KEY)
}