3

我需要我的应用程序不断监听reachability更改并根据 更新我的视图network status,我正在考虑使用notificationcenter,并让我的所有视图监听更改,但我不知道如何实现这一点。

我知道如何使用notificationcenterReachability但我似乎无法找到实现Reachability check.

我应该在哪里检查网络变化,并通知对方ViewControllers

我不认为AppDelegate是正确的地方,如果我把Reachability检查放在 ViewController 中,只要它ViewController是“活动的”,网络检查就会被执行。

4

2 回答 2

1

创建一个“单例”Reachability并在应用启动时对其进行初始化。

让单例定期检查可达性,例如使用NSTimer. 然后它可以通知注册到的任何其他活动视图NSNotificationCenter

// AppDelegate.m: 

@property (nonatomic, strong) Reachability *reachability;

// in applicationDidFinishLaunching...
self.reachability = [[Reachability alloc] init]; 

// Reachability.m

-(id)init {
   self = [super init];
   if (self) {
     [self setupTheTimer];
   }
   return self;
}
于 2013-01-07T11:03:01.257 回答
0

我将创建一个NSObject处理所有网络检查的单例类。

将其命名为 NetworkChecker。

为回调创建一个委托,例如NetworkCheckerDelegate使用如下方法:

@protocol NetworkCheckerDelegate <NSObject>

-(void)networkStatusUpdated:(NSInteger)networkStatus;

@end

@interface NetworkChecker : NSObject
{
    id<NetworkCheckerDelegate> networkDelegate;
}

添加一个方法来启动网络检查并向其添加一个委托,例如:

+(void)updateNetworkWithDelegate:(id<NetworkCheckerDelegate>)delegate
{
    networkDelegate = delegate;

    //Set timer to do Reachability checks
}

-(void)timerIsCompleted
{
    //Do Reachability check

    if( newNetworkState != oldNetworkState ){
        [networkDelegate networkStatusUpdated:newNetworkState];
    }
}

然后在每个ViewController你需要它的地方你可以做(​​在 viewDidLoad 中做这个):

[NetworkChecker updateNetworkWithDelegate:self];

并在网络状态发生变化后执行以下操作:

-(void)networkStatusUpdated:(NSInteger)networkStatus
于 2013-01-07T11:00:14.800 回答