2011-05-02 4 views
1

MapView를로드 할 때 발생하는 오류를 처리하여 iOS 프로그램을 개선합니다. 인터넷에 연결되어 있지 않으면 경고를 표시합니다. 그러나이 방법은 mapViewDidFailLoadingMap이 반복 호출되므로 UIAlert가 호출됩니다. 알리미가 한 번만 표시된다는 것을 어떻게 달성 할 수 있습니까?mapViewDidFailLoadingMap 내의 UIAlertView : withError :

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

}

답변

0

프로그램 로직은 장애/오류가 발생하고 이에 디스플레이를 방지 대리인에게 장애/오류 메시지 전송을 중지 할 때 다음 전무로 MKMapView 객체의 대리자를 설정할 수 있습니다 허용하는 경우 여러 개의 경고가 표시됩니다.

mapViewDidFailLoadingMap : withError 메서드 내에서 delegate를 nil로 설정할 수 있습니다.

0

당신은 오류가 MKMapView에 대해 한 번만 표시되는지 확인하기 위해 BOOL 플래그를 사용할 수 있습니다

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

는 해당 뷰 컨트롤러에 대한 viewWillAppear에 플래그를 재설정하면 오류가 한 번만 표시됩니다 보기에 액세스 할 때마다 :

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    displayErrors = YES; 
}