1

UITabBarを使用するアプリがあり、インターネットからコンテンツをダウンロードする必要があるため、Reachabilityクラスを使用することにしました。それを起動すると、メソッドは大いに機能しますが、すべてのジョブが完了するのを待たずに別のtabBarインデックスに移動すると、最初のインデックスに戻り、アプリは保持されて移動しません。ここにいくつかのコードがあります:

- (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];
}

私はあなたが必要とするかもしれない他のすべてを貼り付けます。

4

1 に答える 1

4

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

また、興味深いことに、インターネットアクセスが必要な場合は、それを利用することを提案するリソースを読みました。「プリフライト」に最初に到達可能性を使用しないでください。失敗した理由を特定できなかった場合は、到達可能性を使用してください:)。私はその知恵がApple自体からのものであることを思い出しますが、それをどこで読んだかを忘れてしまい、グーグルがそれを見つけられませんでした。

于 2011-01-05T23:16:51.110 に答える