MKMapView n'appelant pas les méthodes déléguées
Dans un UIViewController-je ajouter un MKMapView à la vue contrôlé par le contrôleur.
- (void)viewDidLoad {
[super viewDidLoad];
CGRect rect = CGRectMake(0, 0, 460, 320);
map = [[MKMapView alloc] initWithFrame:rect];
map.delegate = self;
[self.view addSubview:map];
}
Plus tard, dans le contrôleur, j'ai
- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView
{
NSLog(@"done.");
}
Fait n'est jamais imprimé. Aucun des délégués d'autres méthodes appelées soit comme mapView:viewForAnnotation: j'utilise un MKMapView dans une autre application, mais cela semble se produire sur une nouvelle application que je fais. Quelqu'un d'autre a vu ce comportement?
EDIT:
Le problème semble être quand UIViewController est faite, le délégué de la MKMapView, une sous-classe directe de NSObject semble fonctionner ok. Je peux contourner ce genre, semble encore très bizarre, car je l'ai fait avant.
source d'informationauteur criscokid | 2009-09-04
Vous devez vous connecter pour publier un commentaire.
J'ai eu exactement le même problème: j'avais assigné < MKMapViewDeledate> de mon contrôleur, et de lier les délégué à "de propriétaire du Fichier" dans Interface Builder, mais mes mises en œuvre délégué méthodes n'ont pas été appelés.
La raison en est que, depuis iOS 4, les cartes sont mises en cache, et à chaque fois qu'une application d'affichage d'une carte mis en cache, puis des méthodes telles que "mapViewDidFinishLoadingMap" ne sont pas appelés. La réinitialisation de "contenu et réglages" dans le simulateur efface la mise en cache des cartes et donc de résoudre le problème.
Un peu vieux, mais depuis iOS 7, il est une nouvelle méthode qui pourrait fonctionner. résolu mon problème
Peut-être vous avez besoin d'aller à l'IB et de contrôle-glissez-la de la MKMapView à la vue conroller, puis sélectionnez délégué à en faire un délégué???
peut-être tout à fait évident, mais juste vérifier:
Avez-vous établi votre viewcontroller déclaration est correctement fait.
Quelque chose comme:
J'ai eu un problème similaire avec les méthodes de MKMapViewDelegate n'est pas appelée.
Ma question était de réglage de la MKCoordinateRegionMakeWithDistance et regionThatFits dans le contrôleur de l'-viewDidLoad() je voulais seulement montrer la région autour de ma maison et de ne pas commencer avec la vue du monde. Ainsi, après l'ajout d'annotations dans le contrôleur de viewDidLoad, j'ai commencé une minuterie. Quand il expire en une seconde, j'ai un zoom sur la région que je veux avec ce qui précède Api et le délégué des méthodes de feu. Il me fait juste un peu étourdi et enclins à vomir sur mon iPad.
Je n'ai plus qu'à traiter avec le fameux avertissements de mémoire faible.
Je viens de tomber sur ce nouveau sur iOS 7 et a trouvé quelque chose qui fonctionne de manière cohérente. La question dont nous sommes généralement combats appelle setRegion avant que la région a contexte (vue rendu). iOS 7 ajoute de nouvelles délégué méthodes représentant toutes les tuiles en cours de rendu, mais pré-iOS 7, la mise en cache des tuiles empêche la méthode du délégué mapViewDidFinishLoadingMap d'être appelé. J'utilise à la place un "pendingRegion" variable pour vérifier si j'ai de la "file d'attente" d'un changement de région pour quand la carte est rendu et puis il suffit d'utiliser la viewDidAppear méthode comme un signal de la carte a été rendu à l'écran et donc d'une région contexte.
Ajouter une variable à votre en-tête:
Ajouter cette méthode à votre code:
Ajouter à votre viewDidAppear:
J'ai eu un problème similaire dans XCode 6.1 bâtiment pour iOS 8.1 dans le cas où aucun MKMapViewDelegate méthodes ont été appelés. Dans une 2ème demande le code identique a abouti à la MKMapViewDelegate méthodes appelé comme prévu.
Dans ViewController.m la mapView délégué a été fixé comme suit:
Dans ViewController.h:
J'avais ajouté manuellement le IBOutlet ligne ci-dessus dans le fichier d'en-tête, mais seulement dans l'application, où le délégué méthodes n'ont pas été reçus.
La solution a été de supprimer les IBOutlet ligne que j'avais ajoutées manuellement à l'en-tête, et puis aller à la table de montage et faites glisser la souris à partir de la MKMapView à la @bloc d'interface dans mon ViewController.h. L'identique IBOutlet a été recréé dans le fichier d'en-tête avec le résultat que tout le délégué méthodes ont été appelés correctement.
Mon problème est que j'ai oublier de définir l'emplacement dans le simulateur. Aller à
Simulator -> Debug -> Location -> Custom location...
et laMKMapViewDelegate
méthodes de téléphoner àPour moi, cela a fonctionné après l'ajout de
NSLocationWhenInUseUsageDescription
chaîne Info.plistJ'ai aussi rencontré le même problème que le vôtre. J'ai trouvé ça: avec le SDK de l'iPhone 3.2 - quand je crée un nouveau UIViewController associé à un fichier xib (la case d'option en UIViewController la création de dialogues), délégué méthodes de MKMapViewDelegate ne sont jamais appelés.
Cependant, lorsque j'ai suivi les étapes ci-dessous, il fonctionne bien.
Créer une nouvelle classe UIViewController (ne jamais cocher l'option: créer un fichier xib associés avec le contrôleur)
Créer un nouveau fichier xib. Ajoutez la carte à l'aide de l'Interface Builder + réglage de la Propriétaire de la classe avec la classe sur l'étape 1 + réglage délégué à l'objet de la point de la carte pour le propriétaire de la classe.
Mettre en œuvre délégué méthodes de la classe UIViewController à l'étape 1.
Quand je veux utiliser mon ViewController (à la carte), je charge avec le nom de plume comme l'exemple ci-dessous:
Le code s'exécute correctement. Je ne sais pas ce qu'Apple change ou fait avec le fichier xib quand j'ai créer mon UIViewController à l'aide de l'assistant, mais il peut la cause de mon problème. Il me faut 1 jour pour trouver ce stupide solution.
Si vous avez trouvé un autre, parlez-en à moi.
Grâce