Dans un UIViewController, j'ajoutez un MkmapView à la vue contrôlée par le contrôleur.
- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView { NSLog(@"done."); }
10 Réponses :
Peut-être assez évident, mais juste vérifier:
Avez-vous assuré que votre déclaration de mode de vue est correctement terminée.
Quelque chose comme: p>
En effet j'ai. Je me demande si cela a quelque chose à voir avec la nouvelle façon Xcode 3.2 et que le SDK travaille ensemble. C'est le premier mapkit que j'ai essayé de commencer depuis 10.6 est sorti.
Peut-être que vous devez accéder à l'IB et à contrôler-glisser-glisser du MKMapView au conroller View, puis sélectionnez Délégué pour en faire un délégué ??? P>
Ceci est la solution correcte. J'étais que la carte doit savoir qui est son délégué.
Ce n'est pas une solution du tout, juste une manière différente d'accomplir la même chose. La vue Carte est racontée à qui son délégué se trouve dans la ligne de ligne.Delegate = Self; Control-glissant dans IB, est l'équivalent visuel de la fixation de programme par programme.
J'ai aussi rencontré le même problème que le vôtre. J'ai trouvé que: Avec l'iPhone SDK 3.2 - Lorsque je crée une nouvelle UIViewController avec un fichier XIB associé (l'option Cochez la case dans la boîte de dialogue Création de UIViewController), les méthodes de délégation de MKMAPViewelegate ne sont jamais appelées.
Cependant, lorsque je suis en dessous des étapes, Il fonctionne bien. P>
Créer une nouvelle classe UIViewController (ne vérifie jamais l'option: Créez un fichier XIB associé au contrôleur) p> li>
créer un nouveau fichier XIB. Ajoutez la carte à l'aide de l'interface Builder + Réglage de la classe propriétaire avec la classe à l'étape 1 + définir l'objet de délégué de la carte Pointe de la classe propriétaire. P> Li>
Implémentez des méthodes de délégation pour la classe UIViewController à l'étape 1. P> Li>
Lorsque je veux utiliser mon mode de vueController (avec la carte ajoutée), je le charge avec le nom de la NIB comme exemple ci-dessous: P>
Le code fonctionne bien. Je ne sais pas ce qu'Apple change ou a fait avec le fichier XIB lorsque je crée mon UIViewController à l'aide de l'assistant, mais cela peut la cause fondamentale de mon problème. Il me faut 1 jour pour trouver cette solution stupide. P> Si vous avez trouvé un autre, partagez-moi s'il vous plaît. P> Merci P> P>
C'est une sorte de hacky ... pourquoi le délégué n'est-il pas appelé?
J'ai eu un problème similaire avec les méthodes de MKMAPViewDelegate non appelées. Mon problème définissait le MKCOORDINATEGIONMakeWithDistance et les régionsTheFits dans le contrôleur -ViewDidLoadLoad () Je voulais seulement montrer à la région autour de ma maison et ne pas commencer par la vue du monde. Ainsi, après avoir ajouté des annotations dans la fenêtre du contrôleur, j'ai commencé une minuterie. Lorsqu'il expire en une seconde, je zoomez dans la région que je souhaite avec les API ci-dessus et les méthodes de délégués incendies. Cela me rend un peu étourdi et enclin à vomir sur mon iPad. P>
Maintenant, je n'ai que de traiter avec les avertissements de mémoire faible à faible mémoire. P>
J'ai eu exactement le même problème: j'avais assigné La raison en est que, puisque iOS 4, des cartes sont mises en cache, et chaque fois qu'une application affiche une carte mise en cache, des méthodes telles que "MapViewDidDinishloadingMap" ne sont pas appelées. La réinitialisation des "contenus et paramètres" dans le simulateur efface les cartes mis en cache et résout donc le problème. P>
Il suffit de réinitialiser mon "contenu et paramètres" sur mon appareil et que suffisamment ces méthodes ont été appelées lors de la première course. Mais pas de chance sur la deuxième course!
Hm, semble mapviewDIdfinishloadingMap: MapView CODE> n'est pas très utile alors.
Je viens de courir à nouveau sur IOS 7 et j'ai compris quelque chose qui fonctionne de manière cohérente. La question que nous nous battions est généralement en train de faire appel à la région avant que la région ne soit contextuelle (vue rendue). IOS 7 ajoute de nouvelles méthodes de déléguée représentant tous les tuiles étant rendus mais pré-iOS 7 Les carreaux mis en cache empêchent la méthode de déléguée MapeviefDidfinishloadingMap d'être appelée. Au lieu de cela, j'utilise une variable "EntendingReGion" pour vérifier si j'ai une "mise en file d'attente" une région change lorsque la carte est rendue, puis utilisez simplement la méthode ViewDidAppear comme signal que la carte a été rendue à l'écran et donc une région aura du contexte. .
Ajoutez une variable à votre en-tête: P>
if(pendingRegion.center.latitude != 0.0) { MKCoordinateRegion useRegion = pendingRegion; [self initPendingRegion]; [self.mapView setRegion:useRegion animated:YES]; }
J'ai eu un problème similaire dans le bâtiment Xcode 6.1 pour iOS 8.1 où aucune des méthodes MKMapViewDelegate n'était appelée. Dans une deuxième application, le code identique a entraîné des méthodes mkmapviewdelegate appelées comme prévu.
dans ViewController.M Le délégué MapView a été défini comme suit: P>
@interface myMapViewController : UIViewController <MKMapViewDelegate> @property (strong, nonatomic) IBOutlet MKMapView *mapView; @end
Pour moi, cela a fonctionné après avoir ajouté nslocationWheninUtiliseusagedescription code> String dans Info.Plist p>
Un peu vieux, mais depuis iOS 7, une nouvelle méthode pourrait fonctionner. résolu mon problème
Lifesaver - merci! Dans mon application, j'ai plusieurs cartes et mapviewDidfinishloadingMap code> est appelé lorsque la première carte est chargée mais non appelée lorsque la deuxième carte est chargée. Toutefois,
MapViewDidDfinishRendingMap code> est appelé chaque fois que chaque carte est rendue. Réponse parfaite, merci!
Mon problème est que j'oublie de définir l'emplacement dans le simulateur. Aller à Simulator -> Débogou -> Localisation -> Emplacement personnalisé ... code> et le
mkmapViewelegate code> commenceront à appeler p>