Я использую класс 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
никогда не вызывается.
Ура ...