gpt4 book ai didi

ios - 使用 AFNetworking 检查互联网连接状态

转载 作者:行者123 更新时间:2023-11-29 00:37:37 25 4
gpt4 key购买 nike

我想创建公共(public)类来检查互联网连接,并且当互联网状态发生变化时它应该通知我。

我正在使用 AFNetworking 检查互联网状态。

这是我尝试过的代码,但它不起作用,请帮助我犯错误的地方?

CheckInternet 是我从 NSObject 派生的公共(public)类

CheckInternet.h

#import <Foundation/Foundation.h>

@interface CheckInternet : NSObject

+ (void)startNetworkMonitoring;
+ (BOOL)isInternetConnectionAvailable;
@end

CheckInternet.m

#import "CheckInternet.h"
#import "AFNetworking.h"

@implementation CheckInternet


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

// Check the reachability status and show an alert if the internet connection is not available
switch (status) {
case -1:
// AFNetworkReachabilityStatusUnknown = -1,
NSLog(@"The reachability status is Unknown");
break;
case 0:
// AFNetworkReachabilityStatusNotReachable = 0
NSLog(@"The reachability status is not reachable");
break;
case 1:
NSLog(@"The reachability status is reachable via wan");
[[NSNotificationCenter defaultCenter] postNotificationName:@"reachabilityChanged" object:nil];
break;
case 2:
// AFNetworkReachabilityStatusReachableViaWiFi = 2
NSLog(@"The reachability status is reachable via WiFi");

[[NSNotificationCenter defaultCenter] postNotificationName:@"reachabilityChanged" object:nil];
break;

default:
break;
}

}];
}

#pragma mark - Check Internet Network Status
+ (BOOL)isInternetConnectionAvailable {
return [AFNetworkReachabilityManager sharedManager].reachable;
}

@end

在我的ViewController.m中(这里我想检查互联网状态)

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];



[CheckInternet startNetworkMonitoring];


if ([CheckInternet isInternetConnectionAvailable])
{
NSLog(@"---- Internet YES------ ");
}
else
{
NSLog(@"----- Internet NO------ ");
}
}

//This is not called...
- (void)reachabilityChanged:(NSNotification *)notification
{
NSLog(@"---- reachabilityChanged ----");
}

提前谢谢您!

最佳答案

首先,我建议开始在 AppDelegate 中监视您的网络事件。将 [CheckInternet startNetworkMonitoring]; 移动到 didFinishLaunchingWithOptions

其次,将以下行添加到 case == 0:

 [[NSNotificationCenter defaultCenter] postNotificationName:@"reachabilityChanged" object:[NSNumber numberWithInteger:one]];

另请确保您在通知中发布了连接状态。因为它是一个整数,所以需要将它包装在一个对象中(通常是 NSNumber)。

第三,您需要观察reachabilityChanged通知。将其添加到您的 viewDidLoad 中。

 [[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reachabilityChanged:)
name:@"reachabilityChanged"
object:nil];

在您的函数 - (void)reachabilityChanged:(NSNotification *)notification 中,您应该能够访问通知的 userInfo 属性并读取其中的状态代码。

此外,一旦你的 viewController 消失,不要忘记取消观察通知。所以在dealloc

[NSNotificationCenter defaultCenter] removeObserver:self];

关于ios - 使用 AFNetworking 检查互联网连接状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40257574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com