2

我使用 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永远不会被调用。

干杯...

4

2 回答 2

1

我在 Mac 上使用了 Apple 的可达性示例,并且运行良好。您应该在主线程上运行可达性。可访问性的全部意义在于您不必为互联网连接而汇集。系统会自动产生一个后台线程来监控互联网连接的变化,并会通知您任何变化。

您的应用程序是否曾经因为可访问性而停滞不前,或者您只是假设它可能会发生?

于 2011-04-07T18:33:13.513 回答
0

看到这个答案:

即使我们确实有互联网连接,可达性有时也会失败

于 2011-04-07T18:15:40.027 回答