0

こんにちは、Apple の到達可能性コードにいくつか問題があります。私が見つけたのは、デバイスがインターネットに正しく接続されていても、最初に到達可能性コードが 1 つの誤った通知 (Networkstatus = NotReachable) を送信し、続いていくつかの正しい通知 (Networkstatus = ReachableViaWiFi) を送信することです。したがって、「NotReachable」通知を受け取ったときに UIAlertView を表示しているため、デバイスがインターネットに接続されていても、アプリはデバイスが接続されていないことをユーザーに通知する uialertview を出力します。

この不都合を回避する方法はありますか?

どんな助けでも本当に感謝しています。

これは私のコードです:

私の .h ファイルで:

@property (nonatomic, retain) Reachability *hostReach;

私の.mファイルでは:

- (void)viewDidLoad
{
    self.hostReach = [Reachability reachabilityWithHostname:@"www.google.com"];

    [[NSNotificationCenter defaultCenter] addObserver:self  selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];

    [_hostReach startNotifier];


    NetworkStatus netStatus = [self.hostReach currentReachabilityStatus];


    if(netStatus == NotReachable && _alertShowing==NO){

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                    message:@"No internet connection found"

                                                   delegate:self
                                          cancelButtonTitle:@"OK"
                                          otherButtonTitles: nil];

        _alertShowing = YES;

        [alert show];

    }

    ...

}


-(void)reachabilityChanged:(NSNotification *)note {

    Reachability* curReach = [note object];

NSParameterAssert([curReach isKindOfClass: [Reachability class]]);    

    NetworkStatus netStatus = [curReach currentReachabilityStatus];


    if(netStatus == NotReachable && _alertShowing==NO){

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                    message:@"No internet connection found"

                                                   delegate:self
                                          cancelButtonTitle:@"OK"
                                          otherButtonTitles: nil];

        _alertShowing = YES;

        [alert show];

    }


-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{
    _alertShowing = NO;

}
4

1 に答える 1

1

なぜ使用するのreachabilityWithHostname:@"www.google.com"ですか?このメソッドは、特定のホストの到達可能性をチェックします (あなたの場合google.com)。また、Google が利用可能かどうかの通知を受け取ります。Google があなたをブロックする場合がありますが、あなたはNotReachableステータスを受け取ります。

使用してみてください:

//reachabilityForInternetConnection- checks whether the default route is available.  
//  Should be used by applications that do not connect to a particular host
+ (Reachability*) reachabilityForInternetConnection;

また、こちらのメソッドの説明もご覧ください。

于 2012-11-12T21:22:55.370 に答える