2011-08-26 8 views
12

두 번째 또는 후속로드에서 MKMapView 대리자 메서드가 호출되지 않고로드 맵 영역을 사용하려고합니다. 어떤 대리자 메서드도 없습니다.MKMapView 캐시를 지우는 방법은 무엇입니까?

- (void)mapViewWillStartLoadingMap:(MKMapView *)mapView; 
- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView; 
- (void)mapViewDidFailLoadingMap:(MKMapView *)mapView withError:(NSError *)error; 

등이 있습니다. 유일한 메소드는

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated; 
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated; 

입니다. ios4는 mapview 타일 이미지를 캐싱하고있는 것 같습니다.

이 줄들은 MKMapViewDelegate Protocol Reference 문서에서 발견되었습니다. 하이라이트 된 선이 제 문제입니다.

이 메서드는 현재 요청과 연결된지도 타일이로드 될 때 호출됩니다. 새로운 시각적 영역을보기로 스크롤하고 타일을 사용할 수없는 경우 맵 타일이 요청됩니다.. 맵 타일은 현재 보이지 않는 맵 부분에 대해서도 요청할 수 있습니다. 예를 들어지도 뷰는 사용자가 작은 팬을 처리하는 데 필요한대로 현재 보이는 영역을 바로 둘러싼 타일을로드 할 수 있습니다.

지도가로드 된 후 특정 작업을 수행해야하지만 위에서 언급 한 대리자 메서드 중 아무 것도 호출되지 않아 원하는 기능을 수행 할 수 없습니다. 누구든지 캐시를 지우거나 이에 대한 대체 솔루션을 제공하는 수정 프로그램을 제안 할 수 있습니까? 나는 이미 herethis이라고 기술 된 방법을 사용해 보았지만 아직 코드를 작동시킬 수 없었다.

+0

위임자 메소드를 사용하여 정확히 달성하려는 것은 무엇입니까? – AlexB

+0

didFinishLoadingMap에서 map의 화면 잡기가 필요합니다.이 위임 메서드는 타일을 캐싱 한 후에 한 번만 호출되며 didfinish 또는 failLoad 대리자도 호출하지 않습니다. 이제 어떻게해야합니까? –

+0

나는 Apple Bug # 13774496을이 문제와 관련하여 제출했으며 문제가 iOS6에 여전히 존재 함을 보여주는 예제 응용 프로그램을 만들었습니다. https://github.com/iwasrobbed/MapKitDelegateBug – iwasrobbed

답변

3

나는이 같은 몇 willStartLoadingMap, didFinishLoadingMapregionDidChange, 수 있다고 생각 : willStartLoadingMap에서

  • 사실에 loading 플래그를 설정;
  • didFinishLoadingMap로드를 flag으로 설정하고 화면 캡처 방법에 대한 대기 호출이 있는지 확인하십시오. 그렇다면 전화하십시오.
  • (regionDidChange) loading 플래그를 확인하고 false로 설정된 경우 화면을 캡처하는 메소드를 호출하십시오. 그렇지 않으면 맵이로드 완료 될 때 실행되도록 대기열에 대기하십시오.

이렇게하면 타일을로드 한 후 화면을 캡처 할 수 있습니다.

그러나 regionDidChange는 여러 번 호출 될 수 있으므로 맵보기가 크게 변경된 경우에만 화면을 캡처해야합니다. 이전지도 지역/센터와 현재지도 지역/센터를 비교할 수 있습니다.

+0

감사합니다. alexb. 나는 당신이 제안한 단계와 함께 작은 패치를 추가했고 트릭을했습니다. –

+0

인터넷 연결이 끊어져 더 이상 타일을로드 할 수없는 경우에는 작동하지 않습니다. 지도가 완전히로드되었음을 나타내는 대리자를 여전히 호출합니다. 애플의 버그처럼 보인다. – iwasrobbed

2

새 프로젝트를 만들고 대리자를 내 View Controller에 연결했습니다. 문제의 세 가지 방법 중 처음 두 가지 방법이 호출됩니다. 모든 타일을로드하기 때문에 오류 대리자 메서드가 호출되지 않았습니다.

최근에 비슷한 문제가 발생했습니다. MKMapView를 서브 클래 싱하고 내 사용자 지정 init 메서드 및 awakeFromNib:에 대리자를 설정하는 것을 잊지 마십시오. 아마도 그것이 당신의 문제를 일으키는 원인 일 것입니다.

관련 문제