/ / Как да изчистите кеша на MKMapView? - цел-c, ios4, mkmapview

Как да изчистя кеша на MKMapView? - цел-c, ios4, 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 кешира изображения на плочки за преглед на карти.

Намерих тези редове в документацията за MKMapViewDelegate Protocol Reference. Подчертаната линия е моят проблем.

Този метод се извиква, когато са заредени плочките на картата, свързани с текущата заявка. Плочките на картата се изискват, когато нова видима област се превърта в изглед и плочките вече не са налице, Могат да бъдат поискани и плочки от карти за части откартата, която понастоящем не се вижда. Например, изгледът на картата може да зареди плочките, които непосредствено заобикалят видимата област, както е необходимо, за да се справят с малки тави от потребителя.

Трябва да изпълня някои операции следкартата е заредена, но тъй като никой от гореспоменатите методи на делегиране не се нарича, не мога да изпълня желаната функционалност. Може ли някой да предложи поправка или да изчисти кеша, или да предостави алтернативно решение за това? Вече се опитах да използвам описаните методи тук и това но все още не съм успял да получа кода.

Отговори:

3 за отговор № 1

Мисля, че можеш да се свържеш willStartLoadingMap, didFinishLoadingMap и regionDidChange, като този:

  • в willStartLoadingMap задайте a loading знамето на true;
  • в didFinishLoadingMap настройте натоварването flag на false и също така проверете дали имате изчакващо повикване за метода, който улавя екрана. Ако е така, наречете го;
  • в regionDidChange проверете loading flag и ако е зададена на false, извикайте метода, който улавя екрана. В противен случай го поставете на опашка, така че да се изпълни, когато картата завърши зареждането.

По този начин сте сигурни, че ще заснемете екрана, след като плочките бъдат заредени.

Въпреки това, regionDidChange може да се нарича многоУверете се, че сте грабвали екрана само когато изгледът на картата се промени значително (можете да сравните предишния регион / център на картата и региона / центъра на текущата карта).


2 за отговор № 2

Създадох нов проект и свързах делегата с моя контролер за изглед. Извикват се първите два метода на въпросните три. Тъй като зарежда всички плочки, методът за делегиране на грешки не се нарича.

Наскоро се сблъсках с подобни проблеми. Подкласвам MKMapView и забравям да поставям делегат в моя обичай init методи и в awakeFromNib:, Може би това е и причината за вашите проблеми.