#ios #mkmapview #uialertview
#iOS #mkmapview #uialertview
Вопрос:
Я улучшу свою программу 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];
}
}
}
Ответ №1:
Если логика вашей программы позволяет, вы можете установить делегату для объекта MKMapView значение nil при возникновении сбоя / ошибки, и он перестанет отправлять сообщения о сбое / ошибке делегату, тем самым предотвращая отображение нескольких предупреждений.
Вы можете присвоить делегату значение nil в методе mapViewDidFailLoadingMap:с ошибкой.
Ответ №2:
Вы можете использовать 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;
}