簡體   English   中英

可達性和通知中心

[英]Reachability and notificationcenter

我需要我的應用程序不斷監聽可訪問reachability更改並根據network status更新我的視圖,我正在考慮使用notificationcenter ,讓我的所有視圖都聽取更改,但我不知道如何實現它。

我知道如何使用notificationcenterReachability但我似乎無法找到實現Reachability check的地方。

我應該在哪里檢查網絡更改,並通知其他ViewControllers

我不認為AppDelegate是正確的地方,如果我將Reachability檢查放在ViewController中,只要ViewController處於“活動狀態”,就會執行網絡檢查。

創建“單身” 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;
}

我將創建一個處理所有網絡檢查的單例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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM