2013-07-23 16 views
9

Merhaba ben kullanıcı bu Eklediğim elma Ulaşılabilirlik sınıf için benim uygulamasında bir ağ bağlantısı alır ve aşağıda benim AppDelegate sınıf didFinishLaunchingWithOptions yönteminde kullanıyorum pasajı olduğunda,iOS Erişilebilirlik Sınıfı'ndan ağ bağlantısı bildirimi nasıl değiştirilir?

Reachability* reachability = [Reachability reachabilityForInternetConnection]; 
     [reachability startNotifier]; 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil]; 

ve benim reachabilityChanged seçici yakalamak istediğiniz yöntem

- (void)reachabilityChanged:(NSNotification*)notification 
{ 
    Reachability* reachability = notification.object; 
    if(reachability.currentReachabilityStatus == NotReachable) 
     NSLog(@"Internet off"); 
    else 
     NSLog(@"Internet on"); 
} 

aşağıda gibidir ama benim telefonda bir ağ bağlantısı aldığımda benim Uçak modunu kapatmak ve ne zaman burada bildirim her türlü almıyorum.

Hiçbir şey eksik miyim?

+0

Bu http://stackoverflow.com/a/10184617/1635315 adresini ziyaret edin. Bu gerçekten size yardımcı olacaktır. – iKT

cevap

6

Belki

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(handleNetworkChange:) name: kReachabilityChangedNotification object: nil]; 
reachability = [Reachability reachabilityForInternetConnection]; 
[reachability startNotifier]; 
13

Bir bool

@property (nonatomic, assign) BOOL hasInet; 

.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [self setUpRechability]; 
} 


-(void)setUpRechability 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNetworkChange:) name:kReachabilityChangedNotification object:nil]; 

    reachability = [Reachability reachabilityForInternetConnection]; 
    [reachability startNotifier]; 

    NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus]; 

    if   (remoteHostStatus == NotReachable)  {NSLog(@"no");  self.hasInet-=NO; } 
    else if  (remoteHostStatus == ReachableViaWiFi) {NSLog(@"wifi"); self.hasInet-=YES; } 
    else if  (remoteHostStatus == ReachableViaWWAN) {NSLog(@"cell"); self.hasInet-=YES; } 

} 

- (void) handleNetworkChange:(NSNotification *)notice 
{ 
    NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus]; 

    if   (remoteHostStatus == NotReachable)  {NSLog(@"no");  self.hasInet-=NO; } 
    else if  (remoteHostStatus == ReachableViaWiFi) {NSLog(@"wifi"); self.hasInet-=YES; } 
    else if  (remoteHostStatus == ReachableViaWWAN) {NSLog(@"cell"); self.hasInet-=YES; } 

// if (self.hasInet) { 
//  UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Net avail" message:@"" delegate:self cancelButtonTitle:OK_EN otherButtonTitles:nil, nil]; 
//  [alert show]; 
// } 
} 
+0

handleNetworkChange birden fazla kez çağrıldı, muhtemelen wifi bağlantılarının yokluğu, Nasıl kontrol edilir? –

0

olarak geçerli ağ durumunu saklamak için AppDelegate bir değişken kullanın startnotifier önce gözlemciyi eklemek gerekir Co'da bir değişiklik olduğunda, bloğa dayalı geri çağrı almak için bu paketleyicinin kullanılabilirlik üzerine kullanabilirsiniz. nnectivite durumu.

GitHub: UHBConnectivityManager

Eğer cocoapods kullanıyorsanız. yollarından

pod 'UHBConnectivityManager' 
0

En basit: ağda bir değişiklik olduğu

reach = [Reachability reachabilityWithHostName:@"www.google.com"]; 
reach.reachableBlock = ^(Reachability *reach){ 
    NSLog(@"Reachable"); 
}; 

reach.unreachableBlock = ^(Reachability *reach){ 
    NSLog(@"Unreachable"); 
}; 
[reach startNotifier]; 

her şey, ilgili blok çağrılır.

0

Yerel değişken yerine mülkünüz olarak erişilebilirlik sağlayın. Çalışırdı.

İlgili konular