Проблема с доступностью уведомлений в отдельном потоке - PullRequest
2 голосов
/ 29 июля 2010

Я использую класс Apples Reachability, и он работает, если я оставлю его в главном потоке (плохой подход).Если я вместо этого перенесу его в отдельный поток, уведомление никогда не будет вызвано.

В didFinishLaunchingWithOptions я вызываю следующее:

[NSThread detachNewThreadSelector:@selector(checkConnection) toTarget:self withObject: nil];

checkConnection выглядит следующим образом:

-(void)checkConnection {
//Test for Internet Connection
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
Reachability *r = [[Reachability reachabilityWithHostName:@"appspot.com"] retain];
[r updateReachability:appDelegate.reachability];
[r startNotifier];
[pool release]; 
}

и reachabilityChanged выглядит следующим образом:

- (void)reachabilityChanged:(NSNotification *)note {
Reachability* curReach = [note object];
NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
[self updateReachability: curReach];
}

и, наконец, updateReachability выглядит так:

- (void)updateReachability:(Reachability *)curReach {
NetworkStatus internetStatus = [curReach currentReachabilityStatus];
if ((internetStatus != ReachableViaWiFi) && (internetStatus != ReachableViaWWAN)) {
    NSLog(@"No net");
} else {
    NSLog(@"Lots of net");
}}

Надеюсь, вы, ребята, можете помочь мне понять, почему reachabilityChanged никогда не вызывается.

Ура ...

Ответы [ 2 ]

1 голос
/ 07 апреля 2011

Я использовал пример доступности Apple для Mac, и он работал нормально.Вы должны запустить достижимость в главном потоке.Все дело в том, что вам не нужно подключаться к интернету.Система автоматически создает фоновый поток для отслеживания изменений в межсетевом соединении и уведомит вас о любых изменениях.

Ваше приложение когда-либо застопорилось из-за доступности или вы просто предполагаете, что это может произойти?

0 голосов
/ 07 апреля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...