2013-12-03 3 views
4

У меня есть Возможность выполнения, как это предлагается в этом thread.iOS: Достижимость - startNotifier выходит из строя после возврата в приложение

Я использую open source Reachability. Однако я не использую блоки, но уведомления, поэтому этот процесс очень похож на код Apple Reachability.

При первом запуске приложения я запускаю это, и он отлично работает.

Reachability *reachability = [reach hostReachability]; 
[reachability startNotifier]; 

reachabilityChanged: событие стрельбы:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachability_Changed:) name:kReachabilityChangedNotification object:nil]; 

Однако, как только я нажимаю кнопку домой и вернуться в приложение, то startNotifier возвращается Внутренне NO вместо Да.

// Set it as our reachability queue, which will retain the queue 
    if(!SCNetworkReachabilitySetDispatchQueue(self.reachabilityRef, self.reachabilitySerialQueue)) 
    { 
#ifdef DEBUG 
     NSLog(@"SCNetworkReachabilitySetDispatchQueue() failed: %s", SCErrorString(SCError())); 
#endif 
     ... 
     return NO; 

и, следовательно, вышеперечисленное событие никогда не срабатывает.

Если я использую это неправильно, а startNotifier следует вызывать только один раз в init, когда достижимость создается и никогда не повторится?

self.hostReachability = [Reachability reachabilityWithHostname:_HOST]; 

ответ

2

Вы должны только вызвать [self.hostReachability startNotifier] один раз на инициализации/нагрузки. Вот краткое изложение ваших основных потребностей, с помощью уведомлений, а не блочный метод на связанную нити:

  1. tonymillion/Reachability Добавить библиотеку в проект.

  2. Создайте свойство для объекта Reachability, чтобы убедиться, что оно сохранено, например.

    @interface ViewController() { 
        NSString *_HOST; 
    } 
    @property Reachability *hostReachability; 
    @end 
    
  3. Зарегистрируйтесь для получения уведомлений об изменениях и отправьте уведомление, например.

    - (void)viewDidLoad 
    { 
        [super viewDidLoad]; 
    
        [[NSNotificationCenter defaultCenter] addObserver:self 
                  selector:@selector(reachabilityChanged:) 
                   name:kReachabilityChangedNotification 
                  object:nil]; 
    
        _HOST = @"www.google.com"; 
        self.hostReachability = [Reachability reachabilityWithHostname:_HOST]; 
        [self.hostReachability startNotifier]; 
    } 
    
    - (void)viewDidUnload 
    { 
        [super viewDidUnload]; 
    
        [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    } 
    
  4. Наконец, создать метод reachabilityChanged: для обработки свой ответ на изменения достижимости, например.

    - (void)reachabilityChanged:(NSNotification*)notification 
    { 
        Reachability *notifier = [notification object]; 
        NSLog(@"%@", [notifier currentReachabilityString]); 
    } 
    

Примечание: При нажатии на кнопку Home и выгружать приложения, изменения в достижимости должны стрелять уведомления сразу после возвращения в приложение.

Смежные вопросы