使用AFNetworking 2.0设置可访问性

时间:2013-11-17 20:41:54

标签: ios ios6 afnetworking reachability afnetworking-2

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

我如何注册更改?一旦网络连接发生变化,将会调用什么/我将无法从文档中看到这一点。

4 个答案:

答案 0 :(得分:43)

您可以阅读AFNetworking read me page

[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));
}];

这里也是a link to the official documentation

答案 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)
    }