2009-09-07 5 views
1

MKMapView/annotations/UINavigationController에 문제가 있습니다. 기본적으로 UINavigationController를 사용하여 뷰를 관리합니다. 내보기 중 하나는 MKMapView가 포함되어 있으며 addAnnotations 메서드를 사용하여 주석 (10에서 200까지)을 추가합니다.addAnnotations 문제 (메모리 관리 가능)

한 가지만 제외하면 모든 것이 잘 작동합니다. UINavigationController에서 "너무 빠르게"탐색하면 아이폰 시뮬레이터가 충돌하여 "EXC BAD ACCESS"신호가 수신됩니다. 예를 들어, MKMapView가 포함 된 뷰를로드하고 UINavigationController 탐색 모음에서 "뒤로"단추를 immediatly 누르면 신호가 나타납니다. addAnnotations 메서드로 문제가 발생했다고 생각했습니다. 내 MKMapView가로드 될 때 주석을 추가하지만 모든 것이 비동기 적으로 완료된 것처럼 보입니다. "뒤로"버튼을 누르기 전에 잠깐 기다리면 오류는 없지만 너무 빠르면 충돌이 발생합니다. addAnnotations 줄을 제거하면 오류가 전혀 발생하지 않습니다. addAnnotations 메서드가 작업을 완료하기 전에 내보기가 UINavigationController에 의해 해제 되었기 때문입니다.

좋은 해결책이 있습니까? 사용자가 기다리는 것을 원하지 않습니다 (예 :로드보기 표시). 나는 해결책이 더 나은 메모리 관리일지도 모르지만 나는 이것을 어떻게 할 수 있는지 보지 못했다.

if(DEBUG_MODE) { NSLog(@"Creating array of placemarks : begin"); } 
self.placemarkCache = [[NSMutableArray alloc] init]; 
// Loading placemarks for a placemark dictionary 
NSArray *sortedKeys = [[self.placemarkDictionary allKeys] sortedArrayUsingSelector:@selector(compare:)]; 
for (id key in sortedKeys) { 
    MyPlacemark *currentPlacemark = [self.placemarkDictionary objectForKey:key]; 
    [self.placemarkCache addObject:currentPlacemark]; 
    [currentPlacemark release]; 
} 
if(DEBUG_MODE) { NSLog(@"Creating array of placemarks : done"); } 
if(DEBUG_MODE) { NSLog(@"Adding placemarks : begin"); } 
[self.mapView addAnnotations:self.placemarkCache]; 
if(DEBUG_MODE) { NSLog(@"Adding placemarks : done"); } 

이 예에서는지도에 아무 것도 표시되기 전에 "아이콘 추가 중 : 완료되었습니다"라는 메시지가 표시됩니다.

답변

5

동일한 문제 또는 버그가 발생하여 blog post에 해결 방법이 있습니다.

디버거 스택 추적에서보고있는 문제가 게시물의 문제와 동일한 지 확인할 수 있습니다.

MapViewController (MKMapView의 부모)가 dealloc되어 있고 MKMapView의 내부를 가져 오는 비동기지도가 MKMapView (MapViewController)의 대리자를 호출하려고하기 때문에 문제가 발생했습니다.

MapViewController의 dealloc에서 MKMapView.delegate = nil을 재설정해야 일부 타일이 반환 된 후에는 대리자가 호출되지 않습니다.

업데이트 : 델리게이트 보유자를 공개하기 전에 dealloc에서 델리게이트를 무시하는 것이 좋습니다 (메모리 관리 문서의 어딘가에 있음). 이렇게하면 장시간 실행되는 비동기 작업에서 이와 같은 문제가 발생하지 않습니다.

+0

정확히 똑같은 문제이며 작동 중입니다. 이제 분명하게 들립니다 ... 답변 해 주셔서 감사합니다! – Vivi

+1

링크가 더 이상 작동하지 않습니다. – J2theC