UIAlertView в mapViewDidFailLoadingMap: withError: - PullRequest
1 голос
/ 02 мая 2011

Я улучшу свою программу iOS, обрабатывая ошибки при загрузке MapView.Если нет подключения к интернету, я буду отображать предупреждение.Но метод mapViewDidFailLoadingMap будет вызываться снова и снова, поэтому UIAlert.Как мне добиться, чтобы оповещение было показано только один раз?

- (void)mapViewDidFailLoadingMap:(MKMapView *)mapView withError:(NSError *)error {
NSString *domain = [error domain];
NSInteger code = [error code];
NSLog(@"userInfo: %@", [error userInfo]);
NSLog(@"localizedDescription: %@", [error localizedDescription]);
NSLog(@"localizedFailureReason: %@", [error localizedFailureReason]);
NSLog(@"localizedRecoverySuggestion: %@", [error localizedRecoverySuggestion]);
NSLog(@"localizedRecoveryOptions: %@", [[error localizedRecoveryOptions] description]);

if ([domain isEqualToString:NSURLErrorDomain]) {
    if (code == NSURLErrorNotConnectedToInternet) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Map Loading Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
        [alert release]; 
    }
}

}

Ответы [ 2 ]

0 голосов
/ 27 декабря 2011

Вы можете использовать флаг BOOL, чтобы ошибка отображалась только один раз для MKMapView:

- (void)mapViewDidFailLoadingMap:(MKMapView *)mapView withError:(NSError *)error
{
    if (displayErrors) {
        // display the error...
        displayErrors = NO; 
    }
}

Если вы сбросите флаг в viewWillAppear для соответствующего контроллера представления,ошибка будет отображаться один раз при каждом доступе к представлению:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    displayErrors = YES;
}
0 голосов
/ 14 июля 2011

Если логика вашей программы позволяет, вы можете установить для делегата объекта MKMapView значение nil при возникновении сбоя / ошибки, и он прекратит отправку сообщений о сбое / ошибке делегату, тем самым предотвращая отображение нескольких предупреждений.

Вы можете установить делегат на ноль в mapViewDidFailLoadingMap: withError метод.

...