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 に答える