/ / Comment effacer le cache MKMapView? - objectif-c, ios4, mkmapview

Comment effacer le cache MKMapView? - objectif-c, ios4, mkmapview

J'essaie de charger la région de mappage et les méthodes de délégué MKMapView ne sont pas appelées lors du deuxième chargement ou du chargement suivant. Aucune des méthodes de délégué à savoir

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

sont jamais appelés. Les seules méthodes appelées sont

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

Il semble que ios4 mette en cache des images de vignettes de mapview.

J'ai trouvé ces lignes dans la documentation MKMapViewDelegate Protocol Reference. La ligne surlignée est mon problème.

Cette méthode est appelée lorsque les tuiles de carte associées à la demande en cours ont été chargées. Les tuiles de carte sont demandées lorsqu'une nouvelle zone visible défile dans la vue et que les tuiles ne sont pas déjà disponibles.. Des tuiles de carte peuvent également être demandées pour des portions dela carte qui ne sont pas visibles actuellement. Par exemple, la vue Carte peut charger des mosaïques entourant immédiatement la zone actuellement visible afin de gérer les petites casseroles de l'utilisateur.

Je dois effectuer certaines opérations après leLa carte est chargée, mais aucune des méthodes déléguées susmentionnées ne s'appelant, je ne suis pas en mesure d'exécuter les fonctionnalités souhaitées. Quelqu'un peut-il suggérer un correctif pour effacer le cache ou fournir une solution alternative à cela? J'ai déjà essayé d'utiliser les méthodes décrites ici et ce mais je ne suis toujours pas parvenu à faire fonctionner le code.

Réponses:

3 pour la réponse № 1

Je pense que vous pouvez couple willStartLoadingMap, didFinishLoadingMap et regionDidChange, comme ça:

  • dans willStartLoadingMap mettre un loading flag à true;
  • dans didFinishLoadingMap définir le chargement flag to false et vérifiez également si vous avez un appel en file d'attente pour la méthode qui capture l'écran. Si oui, appelez-le;
  • dans regionDidChange vérifier la loading flag et s’il est défini sur false, appelez la méthode qui capture l’écran. Sinon, mettez-la en file d'attente afin qu'elle soit exécutée à la fin du chargement de la carte.

De cette façon, vous êtes sûr de capturer l’écran une fois les carreaux chargés.

Cependant, regionDidChange peut être appelé plusieursAssurez-vous de ne saisir l'écran que lorsque la vue de la carte change de manière significative (vous pouvez comparer la région / le centre de la carte précédent et la région / le centre de la carte en cours).


2 pour la réponse № 2

J'ai créé un nouveau projet et connecté le délégué à mon contrôleur de vue. Les deux premières méthodes des trois en question sont appelées. Comme elle charge toutes les mosaïques, la méthode de délégation d’erreur n’a pas été appelée.

Je suis récemment entré dans des problèmes similaires. Je sous-classe MKMapView et oublie de définir le délégué dans mon personnalisé init méthodes et awakeFromNib:. C’est peut-être aussi la cause de vos problèmes.