Impossible d'instancier la classe nommée MKMapView

165

Je fais peut-être quelque chose de vraiment stupide ici, comme je l'ai fait avant et cela a fonctionné et maintenant ...

J'ai créé un nouveau projet iPad, dans la vue détaillée j'ai ajouté un MKMapView, ajouté le MapKit.framework au projet, ajouté la propriété / etc. à l'en-tête. Allez lancer le projet et obtenez un SIGABRT avec

**** Arrêt de l'application en raison d'une exception non interceptée 'NSInvalidUnarchiveOperationException', raison: 'Impossible d'instancier la classe nommée MKMapView' **

J'ai trouvé http://mithin.in/2009/06/22/using-iphone-sdk-mapkit-framework-a-tutorial/ mais, comme je l'ai dit, j'ai déjà ajouté un framework. Qu'est-ce que je rate?

tg2
la source

Réponses:

379

J'ai rencontré cela aussi, mais j'ai pu le dépasser en suivant les instructions de l'étape 2 dans votre lien (merci, au fait):

  1. Ajoutez le framework MapKit au projet. (Ctrl + clic dossier Frameworks -> Ajouter -> Frameworks existants)

Je viens de chercher MapKit.framework, je l'ai ajouté au projet et l'erreur a disparu.

Je n'ai pas encore ajouté de code de carte (même si j'ai un MapViewDelegate connecté dans IB), mais cela fonctionne très bien jusqu'à présent!

JoBu1324
la source
Heureux que cela ait aidé! Je l'ai finalement fait fonctionner en faisant ce qui suit: - Projet propre - Réinitialiser l'appareil - Redémarrer la machine Je ne sais pas ce qui était nécessaire, mais cela fonctionne maintenant :)
tg2
1
L'ajout du framework MapKit a également fonctionné pour moi. Mon code a fait apparaître la carte et tout a bien fonctionné.
finneycanhelp
4
Si quelqu'un rencontre ce problème avec xcode 4.2, j'obtenais l'erreur même si le framework apparaissait dans le dossier Frameworks après l'avoir ajouté. J'ai cliqué sur la cible, puis sur Build Phases, et j'ai remarqué qu'elle ne se trouvait pas dans la section Link Binary with Library. Le faire glisser du dossier frameworks vers cette section a résolu le problème. Merci pour l'indice,
Tim Stephenson
1
C'est un peu triste, cela ne vous avertit pas lorsque vous faites glisser (depuis Iterface Builder) une vue qui n'est pas liée à votre projet.
Paul Brewczynski
30

Cliquez sur votre projet pour afficher les paramètres du projet. Sous Cibles, cliquez sur votre projet, sélectionnez dans la barre d'outils supérieure "Phases de construction". Sous l'onglet "Lien binaire avec les bibliothèques", vous verrez la liste des frameworks inclus dans votre projet. Cliquez sur le bouton "+" et ajoutez la bibliothèque MapKit de la liste affichée à votre projet.

Alice
la source
27

Pour Xcode 6.1:

  • Sélectionnez votre projet
  • Dans l'onglet général, recherchez les cadres et bibliothèques liés (le dernier)
  • Appuyez sur le bouton +
  • Rechercher MapKit.framework
  • Enfin ajouter
marc_aragones
la source
17

Moyen facile!

Fonctionne au-dessus de la version 7.2 de Xcode

En ce qui me concerne, la sélection du MAPS à partir des fonctionnalités liera automatiquement votre framework à votre projet, tout ce que vous avez à faire est de cocher le bouton Cartes dans Capabilities -> Maps .

Voici la capture d'écran ci-jointe. À votre santé!!

entrez la description de l'image ici

essayezKuldeepTanwar
la source
Cela fonctionne également pour la version 8 de Xcode. Après avoir activé "Maps" sous "Capabilities", cela indique que le MapKit.framework sera lié. Vous pouvez également le confirmer en allant dans "Build Phases" et en développant la section "Link Binary With Libraries". Vous devriez y voir également MapKit.framework.
Ryan H.
9

Pour xCode 4.2:

Click on your project name ->targets ->building Phase ->link binary with library 
  -> click on + sign ->select mapKit.framework ->click add
SumiSadiq
la source
3

J'ai remarqué que je recevais ce message (en plus de l'original mentionné dans cet article) lorsque je construisais et exécutais sur le simulateur:

ld: avertissement: ignorer le fichier /Users/peter/programming/iPhone/iNspector/MapKit.framework/MapKit, le fichier a été construit pour un format de fichier non pris en charge qui n'est pas l'architecture liée (i386)

Ensuite, j'ai simplement connecté mon iPhone, construit et exécuté sur l'appareil, et la carte a fonctionné.

Il semble donc que le framework MapKit ne puisse pas être compilé sur l'architecture 386, il a besoin de l'appareil.

futur choqué
la source
3

En ce qui concerne la contribution de @ futureshocked, je suis également tombé sur le

Id: avertissement: ignorer le fichier /blah.../MapKit, le fichier a été construit pour un format de fichier non pris en charge qui n'est pas l'architecture en cours de liaison (i386)

problème.

** Vérifiez que vous n'avez pas copié le MapKitframework dans votre répertoire de projet local lorsque vous l'avez ajouté à votre projet. Je l'ai accidentellement fait et XCode m'a donné l'erreur ci-dessus. Je l'ai donc supprimé de mon répertoire de projet (dans Finder), recompilé et tout était à nouveau normal.

Si vous n'avez pas le cadre dans votre projet, continuez et reliez comme indiqué dans la réponse ci-dessus .

Vous avez trouvé un bon tutoriel sur la mise en route de MapKit:
http://www.youtube.com/watch?v=X-3jM24EIGM&feature=related

ecurb33
la source
3

J'ai également reçu cette erreur en essayant de déployer sur mon téléphone 5.1 (avec XC 4.5), même après avoir changé ma cible de déploiement en 5.1. Il semble que la mise à jour des cartes ne volerait pas car j'avais toujours Google Maps sur mon téléphone. Après avoir mis à jour le système d'exploitation de mon téléphone, l'exception a disparu.

RonTor
la source
Ne devrait-il pas suffire de supprimer simplement les fichiers avec des définitions de carte?
Konrad Viltersten
2

Veuillez importer le WebKit lors de vos phases de construction. Vous devez importer le WebKit

Naloiko Eugène
la source
Qu'est-ce que ça WebKita à voir avec MKMapView?
Alejandro Iván