使用AFnetworking 2.0设置可达性
-
21-12-2019 - |
题
我正在尝试使用新的2.0 AFnetworking 。
在我的appdelegate中,我初始化sharedManager。
// Instantiate Shared Manager
[AFNetworkReachabilityManager sharedManager];
.
然后在相关的VC方法中,我检查以查看是否可易行:
// 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];
.
如何注册更改?一旦网络连接更改,我就无法从文档中看到它的/将被调用。
解决方案
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));
}];
.
这里也是链接到官方文件。
其他提示
我有一个单身公术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);
}
}];
.
}
在做出请求之前,您调用此方法返回指示Internet的块是否可达:
[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];
}
}];
. 我只是经历你的问题和所有答案。之后我决定做所有这些事情。所以,在我的现有项目中,我只是通过可可荚中包含了AFnetworking,这里是完全击败我的解决方案。
解决方案 - 首先AFNetworkReachabalyManager是一个单身级。您无需为SharedManager执行AppDelegate初始化。
//[AFNetworkReachabilityManager sharedManager];
#import <AFNetworkReachabilityManager.h>
- (void)viewDidLoad {
//Starting the network monitoring process
[[AFNetworkReachabilityManager sharedManager]startMonitoring];
//Checking the Internet connection...
[[AFNetworkReachabilityManager sharedManager]setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status){
if (status == AFNetworkReachabilityStatusReachableViaWWAN || status == AFNetworkReachabilityStatusReachableViaWiFi) {
UIAlertView *alertNetFound = [[UIAlertView alloc]initWithTitle:@"Network Found" message:@"Please Wait Until It is loading" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alertNetFound show];
}else{
UIAlertView *alertNetNotFound = [[UIAlertView alloc]initWithTitle:@"No Internet" message:@"Please Check Your Internet Connection Honey" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alertNetNotFound show];
}
}];
.
所以,在这种情况下,每次设备连接到网络时,它将首先执行StartMenitoring过程,然后每次都会击中状态块,并根据状态显示警报。
您可以根据您的选择进行任何操作,通过替换状态块上的警报。我用它来自动从本地存储加载网页,但我删除了简单性的代码。
它甚至与我的模拟器和Mac mini合作..
感谢
希望这有用。
我在app委托中使用它 - >
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)
}
. 不隶属于 StackOverflow