2011-03-16 6 views
0

Je tente de charger des annotations à partir d'une classe distincte une fois que les données ont été analysées. Les données sont correctement analysées que je suis à travers le NSLog. J'envoie les données à la classe chargée de charger le MKMapView. Cette classe reçoit les données correctes.iOS MapKit Méthode didAddAnnotationViews non appelée

Voici le code pour la classe que mes données parse (ParseData.m):

AnnotationsTest *loadFriend = [[AnnotationsTest alloc] init]; 
    [loadFriend loadOutAnnotations:friendFound]; 
    [loadFriend loadOutAnnotationsAgain]; 
    [loadFriend release]; 

La méthode appelée dans ma deuxième classe (MapViewController.m):

-(void)loadOutAnnotations:(NSMutableArray *)friendData 

avec le code suivant:

CLLocationCoordinate2D workingCoordinate; 

workingCoordinate.latitude = [[friendData objectAtIndex:5] floatValue]; 
workingCoordinate.longitude = [[friendData objectAtIndex:4] floatValue]; 
MapAnnotation *appleStore1 = [[MapAnnotation alloc] initWithCoordinate:workingCoordinate]; 
[appleStore1 setTitle:@"Title"]; 
[appleStore1 setSubtitle:@"subtitle"]; 
[appleStore1 setUserData:[friendData objectAtIndex:6]]; 
[appleStore1 setAnnotationType:iCodeBlogAnnotationTypeApple]; 

[self.mapView addAnnotation:appleStore1]; 

Et enfin, voici mon code pour répondre aux événements addAnotation (MapViewController.m):

- (void)mapView:(MKMapView *)mapViews didAddAnnotationViews:(NSArray *)views { 
id myAnnotation = [mapViews.annotations objectAtIndex:0]; 
[mapViews selectAnnotation:myAnnotation animated:YES]; 
NSLog(@"didAddAnnotationViews is called");} 

L'annotation se charge parfaitement si je coder en dur les variables, ne passent pas la NSMutableArray par la méthode, et font appel à la méthode dans la section classe MapViewController de viewDidLoad. Lorsque j'essaie d'appeler la méthode pour ajouter des annotations d'une autre classe, la méthode didAddAnnotationViews ne répond pas.

Veuillez nous aviser. Merci d'avance!!

Evan

+0

NSMutableArray est-il éventuellement libéré avant de le transmettre à la méthode? Où construisez-vous le tableau? Et pourriez-vous s'il vous plaît expliquer en détail à nouveau ce qui fonctionne exactement quand vous codez quelles variables? Pas à pas? –

+0

Lorsque je code en dur la fonction loadOutAnnotation avec des coordonnées et que je l'appelle depuis la section viewDidLoad de MapViewController.m, l'annotation apparaît. Si j'essaie d'appeler la fonction loadOutAnnotation de ParseData.m, elle n'apparaîtra pas. J'ai ajouté le didAddAnnotationViews pour charger l'annotation, mais pas de chance. NSMutableArray transmet simplement les coordonnées que je peux vérifier sont passées à la méthode loadOutAnnotation via le NSLog. Faites-moi savoir s'il y a plus d'informations que je peux fournir. Merci d'avoir regardé ça! –

+0

Je pense qu'il est trop difficile de comprendre quel est le problème avec la quantité de code fournie. Peut-être que vous pouvez emballer le code et le mettre sur github ou quelque chose ou afficher toutes les méthodes impliquées ici. –

Répondre

3

Je regardé votre code et le comportement attendu: Une annotation carte est juste la représentation abstraite d'une annotation. Vous devez l'ajouter "manuellement" à la carte. La carte ALORS demande au délégué la VUE qu'il doit utiliser pour AFFICHER l'annotation. Il n'est donc pas étonnant qu'il n'apparaisse pas lorsque vous ne l'ajoutez pas à la carte :)

+0

Merci Johannes! Désolé, je suis encore un peu nouveau pour la programmation iOS. Pour clarifier, lorsque j'ajoute l'annotation avec [self loadOutAnnotation] sous viewDidLoad de AnnotationProblemViewController.m, cela fonctionne car la méthode - (MapAnnotationView *) mapView: (MKMapView *) mapView viewForAnnotation: (id ) annote indique à la carte la vue devrait s'afficher. Mais quand j'appelle loadOutAnnotation de CallAnnotation, cette méthode n'est pas appelée pour dire à la carte quelle vue afficher? Comment puis-je corriger cela? –

+1

Je vois ce que vous dites. Ok, c'est le problème: dans CallAnnotation.m, vous créez une nouvelle instance du contrôleur de vue. Tu ne veux pas ça. Vous souhaitez utiliser le contrôleur de vue à partir du délégué de l'application. Vous devez donc passer une référence à ce contrôleur de vue lorsque vous créez votre instance de CallAnnotation, puis appelez loadOutAnnotation sur ce contrôleur de vue. (Btw, s'il vous plaît, votez pour une réponse quand vous l'aimez, c'est une bonne pratique sur StackOverflow :)) –

+0

Beautiful! Merci merci! Heures consacrées à une erreur aussi simple. Pour appeler correctement la méthode de CallAnnotation, j'ai utilisé ce qui suit: AnnotationProblemAppDelegate * appDelegate = (AnnotationProblemAppDelegate *) [[UIApplication sharedApplication] délégué]; \t [appDelegate.viewController loadOutAnnotations]; –

Questions connexes