0

Web サービス接続を処理するオブジェクトから、ネットワークに障害が発生すると、Web サービス オブジェクトを使用するビュー コントローラーにアラートを渡します。

WebServiceObject:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:[NSString stringWithFormat:@"Connection failed!  You must be connected to a Wifi source to download data.  Please reconnect to a Wifi source and try again later."] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
    NSDictionary *alertDict = [NSDictionary dictionaryWithObjectsAndKeys:alert, @"AlertView", nil];
    [[NSNotificationCenter defaultCenter] postNotificationName:DisplayAlertNotification object:self userInfo:alertDict];

ビューコントローラー:

- (void)displayAlert:(NSNotification *)notification {
    NSDictionary *dict = [notification userInfo];
    if ([[dict objectForKey:@"AlertView"] isKindOfClass:[UIAlertView class]]) {
        UIAlertView *alert = [dict objectForKey:@"AlertView"];
                NSNumber *theTag = [dict objectForKey:@"AlertTag"];
    NSLog(@"%i", [theTag integerValue]);
    alert.tag = [[dict objectForKey:@"AlertTag"] integerValue];
        [alert show];
    }
}


- (void)removeAlert:(NSNotification *)notification {
    NSDictionary *dict = [notification userInfo];
    if ([[dict objectForKey:@"AlertTag"] isKindOfClass:[NSNumber class]]) {
        NSNumber *theTag = [dict objectForKey:@"AlertTag"];
        UIAlertView *alert = (UIAlertView *)[self.view viewWithTag:[theTag integerValue]];
        // Not sure why but my alert is nil at this point
        [alert dismissWithClickedButtonIndex:0 animated:YES];
    }
}

また、removeAlert メソッドを同じ方法で使用して、アラートをプログラムで削除します。これの目的は、ネットワークに障害が発生したが、ユーザーがまだ [OK] をクリックしておらず、ネットワークが再びオンになった場合に、ネットワーク障害アラートを無視し、ネットワーク再開アラートを表示することです。アラートを無視して Network Resumed を表示した後以外は機能します。ユーザーが Network Resumed で [OK] をクリックすると、元の Network Failed が 1 回だけ復旧します。Network Failed が表示されているときにユーザーが [OK] をクリックすると、ネットワークが元に戻りません。

この方法でアラートを正しく無視していますか? ありがとう。

編集: WebServiceObject に参照を保存し、そのように閉じるだけで動作させることができます。

4

1 に答える 1

1

アラートを nil に設定すると、何もしません

alert = nil;

[alert dismissWithClickedButtonIndex:0 animated:YES];
于 2012-05-10T15:24:59.000 に答える