MKMapView ne pas appeler les méthodes de délégués

voix
10

Dans un UIViewController ajouter un MKMapView à la vue contrôlée 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 je

- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView
{
     NSLog(@done.);
}

Fait n'est jamais imprimé. Aucune des autres méthodes de délégués se soit appelé comme Mapview: viewForAnnotation: J'utilise un MKMapView dans une autre application, mais cela semble se produire sur toute nouvelle application que je fais. Quelqu'un at-il vu d'autre ce comportement?

MODIFIER:

Le problème semble être quand UIViewController est fait le délégué du MKMapView, une sous-classe directe de NSObject semble fonctionner bien. Je peux travailler autour comme ça, semble encore très étrange depuis que je l'ai fait avant.

Créé 04/09/2009 à 14:42
source utilisateur
Dans d'autres langues...                            


10 réponses

voix
8

J'ai eu exactement le même problème: j'avais assigné <MKMapViewDeledate> à mon contrôleur, et Linked le délégué à « propriétaire du fichier » dans Interface Builder, mais toujours mes méthodes déléguées mises en œuvre 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 afficher une carte en cache alors des méthodes telles que « mapViewDidFinishLoadingMap » ne sont pas appelés. Remise à zéro « le contenu et les paramètres » dans le simulateur efface les cartes mises en cache et résout donc le problème.

Créé 15/01/2011 à 19:06
source utilisateur

voix
6

Un peu vieux, mais depuis iOS 7, une nouvelle méthode qui pourrait fonctionner. a résolu mon problème

- (void)mapViewDidFinishRenderingMap:(MKMapView *)mapView fullyRendered:(BOOL)fullyRendered
Créé 14/06/2015 à 22:48
source utilisateur

voix
4

Peut-être vous avez besoin d'aller à l'IB et le contrôle-glisser de la MKMapView au conroller vue, puis sélectionnez délégué pour en faire un délégué ???

Créé 29/01/2010 à 00:59
source utilisateur

voix
1

J'ai eu un problème similaire avec les méthodes de MKMapViewDelegate pas appelés. Ma question mettait l'MKCoordinateRegionMakeWithDistance et regionThatFits dans Je voulais montrer que la région -viewDidLoad du contrôleur () autour de ma maison et ne pas commencer par la vision du monde. Après avoir ajouté des annotations dans viewDidLoad, j'ai commencé une minuterie du contrôleur. Quand il arrive à expiration en une seconde, je zoome sur la région que je veux avec les API ci-dessus et les méthodes de délégué feu. Il me fait juste un peu étourdi et enclin à vomir sur mon iPad.

Maintenant, je n'ai que pour faire face aux sacrément faibles avertissements de mémoire.

Créé 21/05/2010 à 16:38
source utilisateur

voix
1

peut-être tout à fait évident, mais simplement vérifier:

Avez-vous fait votre déclaration que viewcontroller est fait correctement. Quelque chose comme:

@interface YourViewController : UIViewController <MKMapViewDelegate>
Créé 04/09/2009 à 16:02
source utilisateur

voix
0

Mon problème est que j'oublie de définir l' emplacement dans le simulateur. Aller à Simulator -> Debug -> Location -> Custom location...et les MKMapViewDelegateméthodes vont commencer à appeler

Créé 04/04/2017 à 09:19
source utilisateur

voix
0

J'ai eu un problème similaire dans XCode 6.1 pour iOS 8.1 la construction où aucune des méthodes MKMapViewDelegate étaient appelés. Dans une 2ème application, le code identique a donné lieu à des méthodes MKMapViewDelegate être appelé comme prévu.

En ViewController.m le délégué MapView a été défini comme suit:

- (void)viewDidLoad {
    ...
    self.mapView.delegate = self;

En ViewController.h:

@interface myMapViewController : UIViewController <MKMapViewDelegate>
@property (strong, nonatomic) IBOutlet MKMapView *mapView;
@end

J'avais ajouté manuellement la ligne IBOutlet ci-dessus pour le fichier d'en-tête, mais seulement dans l'application où les méthodes de délégués ne sont pas reçus.

La solution était de supprimer la ligne IBOutlet j'avais ajouté manuellement à l'en-tête, puis aller à la table de montage et CTRL-glisser de la MKMapView au bloc @interface dans mon ViewController.h. Le IBOutlet identique a été recréée dans le fichier d'en-tête avec le résultat que toutes les méthodes de délégués ont été appelés correctement.

Créé 01/03/2015 à 06:55
source utilisateur

voix
0

Je viens de rencontrer dans ce nouveau sur iOS 7 et pensé à quelque chose qui fonctionne de manière cohérente. La question nous appelle setRegion avant que la région en général a la lutte contre le contexte (vue rendu). iOS 7 ajoute de nouvelles méthodes de délégués représentant toutes les tuiles étant rendu, mais avant iOS 7 les mises en cache empêche Carreaux et dalles la méthode délégué mapViewDidFinishLoadingMap d'être appelé. Au lieu de cela utiliser une variable « de pendingRegion » pour vérifier si je « mis en attente » un changement de région lorsque la carte est rendu, puis utilisez simplement la méthode viewDidAppear comme un signal de la carte a été rendu à l'écran et donc une région aura contexte .

Ajouter une variable à votre tête:

MKCoordinateRegion pendingRegion;

Ajouter cette méthode à votre code:

-(void)initPendingRegion {
    pendingRegion.center = CLLocationCoordinate2DMake(0.0, 0.0);
}

Ajoutez ceci à votre viewDidAppear:

if(pendingRegion.center.latitude != 0.0) {
        MKCoordinateRegion useRegion = pendingRegion;
        [self initPendingRegion];
        [self.mapView setRegion:useRegion animated:YES];
}
Créé 26/09/2013 à 16:26
source utilisateur

voix
-1

Pour moi, il a travaillé après avoir ajouté la NSLocationWhenInUseUsageDescriptionchaîne dans Info.plist

Créé 03/05/2015 à 12:12
source utilisateur

voix
-2

J'ai aussi rencontré même problème que le vôtre. J'ai trouvé que: avec l'iPhone SDK 3.2 - quand je crée une nouvelle UIViewController avec un fichier associé xib (option de case à cocher dans le dialogue création UIViewController), ne sont jamais appelées méthodes de délégués de MKMapViewDelegate.

Cependant, quand je suis étapes ci-dessous, il fonctionne bien.

  1. Créer une nouvelle classe UIViewController (jamais cochez l'option: créer un fichier associé au xib contrôleur)

  2. Créer un nouveau fichier xib. Ajouter la carte en utilisant Interface Builder + réglage de la classe propriétaire avec la classe à l'étape 1 réglage + objet délégué du point de la carte à la classe propriétaire.

  3. Mettre en œuvre des méthodes de la classe délégué pour UIViewController à l'étape 1.

  4. Quand je veux utiliser mon ViewController (avec la carte ajoutée), je charge avec le nom nib comme exemple ci-dessous:

    MapPreviewController* mapPreviewController = [[MapPreviewController alloc] 
        initWithNibName:@"MapPreviewController" bundle:[NSBundle mainBundle]];
    
    [self.centerPanelView addSubview:mapPreviewController.view];
    

Le code fonctionne bien. Je ne sais pas ce que Apple change ou a fait avec le fichier lorsque je crée xib mon UIViewController à l'aide de l'assistant, mais il peut la cause de mon problème. Il me faut 1 jour pour trouver cette solution stupide.

Si vous avez trouvé un autre, s'il vous plaît me partager.

Merci

Créé 02/05/2010 à 11:09
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more