2011-01-03 14 views
1

私はUITabBarを使用するアプリケーションを持っており、インターネットからコンテンツをダウンロードする必要があるため、Reachabilityクラスを使用することに決めました。私がそれを起動すると、メソッドが大きく動作しますが、私はすべての仕事が完了し、別のtabBarインデックスに行くことを待つことができない場合、私は最初のものに戻ります、アプリケーションは保持し、移動しません。ここにいくつかのコードがあります:到達可能性に関する問題Appleクラス

- (void)viewWillAppear:(BOOL)animated { 
[[self.navigationController navigationBar] setHidden:YES]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil]; 
[internetReachable startNotifier]; 
[hostReachable startNotifier]; 
} 
- (void)checkNetworkStatus:(NSNotification *)notice { 
BOOL flag; 
UIAlertView *alert; 
NetworkStatus internetStatus = [internetReachable currentReachabilityStatus]; 

alert = [[UIAlertView alloc] initWithTitle:@"Attenzione!" message:@"Non ci sono connessioni disponibili a internet: impossibile scaricare i dati!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
switch (internetStatus) { 
    case NotReachable: 
     self.internetActive = NO; 
     flag = NO; 
     break; 
    case ReachableViaWiFi: 
     self.internetActive = YES; 
     flag = YES; 
     break; 
    case ReachableViaWWAN: 
     self.internetActive = YES; 
     flag = YES; 
     break; 
} 
if (flag) 
    [NSThread detachNewThreadSelector:@selector(loadDataFromInternet) toTarget:self withObject:nil]; 
else { 
    [alert show]; 
    [self.spinner stopAnimating]; 
} 

[alert release]; 
} 

私はあなたが必要とする可能性があるすべてを貼り付けます。

+0

iOS 4.2用に更新されたAppleの最新の到達可能性クラスを使用していますか? – iPhoneDev

+0

はい。 v4.0については、20-07-2010に更新 – IssamTP

答えて

4

私はアプリで同様の問題がありました。これはまた私が答えたthis questionに似ています - あなたが非同期にチェックしていることを確認してください。メインスレッドではなく(少なくともUIをブロックしないでください)。

また、興味深いことに、私はインターネットアクセスが必要なときには、そのために行くことを示唆するリソースを読んだことがあります。 "プリフライト"にReachabilityを使用しないでください。あなたがなぜ失敗したのかを決めることができなかったら、Reachabilityを使ってください:)。その知恵はApple自身からのものだと思いますが、私はそれを読んだ箇所を忘れてしまい、Googleがそれを見つけられないのは間違いです。

+0

ありがとうございます。それは面白い。私は、ユーザーが接続しているかどうかを確認するために、最初のビューでのみReachabilityを使ってこの問題を部分的に解決しました(全アプリはインターネットからダウンロードしたデータに基づいています)。 NSURLConnectionを使用すると、エラーをブロックしてクラッシュを防ぐことができます。 – IssamTP

+0

これは知恵の言葉です。私は到達可能性検査と最悪の結果を得るのに苦労しました。ネットワーク関連の要求が失敗した後にのみ、到達可能性の状態をチェックすることは理にかなっています。 – wasabi

関連する問題