我正在尝试使用新的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];
.

如何注册更改?一旦网络连接更改,我就无法从文档中看到它的/将被调用。

有帮助吗?

解决方案

您可以在 AFnetworking阅读Me Page

[[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)
    }
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top