2016-04-15 5 views
1

J'essaie d'ouvrir des cartes Apple dans la carte que j'ai créée, et en train de le faire, j'obtiens une erreur disant "sélecteur non reconnu envoyer à l'instance ". J'utilise arc donc il ne devrait y avoir aucun problème de gestion de la mémoire. Voici le code que j'ai écrit dans viewDidLoad. J'ai créé un bouton et ajouté un sélecteur à elle ..Sélecteur non reconnu envoyé à l'instance lors de la tentative d'ouverture de l'application Apple Maps dans mon application

UIButton *appleMapsButton = [[UIButton alloc] init]; 
appleMapsButton.frame = CGRectMake(100, 100, 200, 200); 
appleMapsButton.backgroundColor = [UIColor redColor]; 
[appleMapsButton addTarget:self action:@selector(appleMapsClicked:) forControlEvents:UIControlEventTouchUpInside]; 
[mapView addSubview:appleMapsButton]; 

Voici la méthode d'action:

-(void)appleMapsClicked{ 

CLLocationCoordinate2D endingCoord = CLLocationCoordinate2DMake(lat, lng); 
MKPlacemark *endLocation = [[MKPlacemark alloc] initWithCoordinate:endingCoord addressDictionary:nil]; 
MKMapItem *endingItem = [[MKMapItem alloc] initWithPlacemark:endLocation]; 

NSMutableDictionary *launchOptions = [[NSMutableDictionary alloc] init]; 
[launchOptions setObject:MKLaunchOptionsDirectionsModeDriving forKey:MKLaunchOptionsDirectionsModeKey]; 

[endingItem openInMapsWithLaunchOptions:launchOptions]; 
} 

Voici l'erreur que je reçois dans la région du débogueur:

- [ MapViewController appleMapsClicked:]: sélecteur non reconnu envoyé à l'instance 0x176564d0 2016-04-15 16: 10: 39.394 Restaurant [1081: 220822] *** Terminaison de l'application en raison d'une exception non interceptée 'NSInvalidArgumentException', raison: '- [MapViewController appleMapsClicked:] : sélecteur non reconnu envoyé à l'instance 0x176564d0'

Répondre

3

Vous vous inscrivez pour recevoir le message avec la méthode appleMapsClicked:, mais votre méthode n'a pas de paramètre.

La suppression de:, ou la modification de la signature de méthode au -(void)appleMapsClicked:(id)sender doit être corrigée.

0

Trouvé Solution:

Lorsque vous ajoutez une méthode en tant que sélecteur et la méthode n'a pas de paramètres ne placent pas les deux points à côté de la méthode comme ceci:

(mySelector:) 

En excluant le côlon, l'application n'a pas planté.

0

Solutions:

  1. Changer la méthode -(void)appleMapsClicked avec -(void)appleMapsClicked:(UIButton *)sender

  2. Modifier le nom du sélecteur @selector(appleMapsClicked:) avec @selector(appleMapsClicked)

Vous pouvez choisir une des ces solutions

2

Cela m'arrive la plupart du temps. La meilleure façon d'effacer cette erreur qui est supposée "ne pas arriver en premier lieu" est:

1) Supprimez votre UIButton et l'IBOutlet 2) Créez à nouveau un UIButton et reconnectez-vous au ViewController.

Pour savoir si c'est le problème, supprimez tous vos codes à l'intérieur de la fonction du bouton et exécutez. Si vous appuyez sur le bouton et qu'il fait encore une erreur, il vous suffit de créer un nouveau bouton.

Cela pourrait être une solution pour certains.

1

Vous avez probablement renommé ou supprimé un bouton qui invoque appleMapsClicked sur MapViewController.

Même chose pour moi, mais je ne pouvais pas fixer les moyens conventionnels, (clic droit sur le bouton et la suppression de la référence de la méthode de l'interface utilisateur)

alors je pourrais résoudre le problème en ouvrant Main.StoryBoard en utilisant un éditeur externe (faites un clic droit sur Main.StoryBoard et cliquez sur "ouvrir en utilisant un éditeur externe").

Il ouvrira le storyboard en tant que fichier XML. Dans l'éditeur, recherchez "appleMapsClicked" sous le nœud MapViewController. La première chose que vous pouvez trouver est une référence à une méthode (appleMapsClicked) qui n'existe plus. Supprimez la ligne et exécutez à nouveau.

Cela peut sembler une mauvaise solution, car vous ne devriez pas jouer avec des fichiers générés automatiquement avec Xcode, mais c'était mon seul moyen de m'en sortir.

J'espère que cela aide un peu.