web-dev-qa-db-fra.com

AdMob se bloque avec [GADObjectPrivate changeState:]: sélecteur non reconnu

J'ai installé le Kit de développement AdMob SDK 6.2.0 (Xcode 4.5 (4G182) et je teste sur un iPhone 4S et le simulateur). J'ai suivi le tutoriel et je veux juste que AdMob affiche une bannière une fois. Mais il se bloque sur la dernière ligne:

self.bannerView = [[GADBannerView alloc]
               initWithFrame:CGRectMake(0.0,
                                        self.view.frame.size.height -
                                        GAD_SIZE_320x50.height,
                                        GAD_SIZE_320x50.width,
                                        GAD_SIZE_320x50.height)];

self.bannerView.delegate = self;
self.bannerView.adUnitID = @"xREMOVEDBYMEx";
self.bannerView.rootViewController = self;
[self.view addSubview:self.bannerView];
GADRequest * request = [GADRequest request];
request.testing = YES;
[self.bannerView loadRequest:request];

L'accident est

2012-09-28 09: 03: 58.268 NewProject [1467: c07] - [GADObjectPrivate changeState:]: sélecteur non reconnu envoyé à l'instance 0x95c17d0 2012-09-28 09: 03: 58.276 NewProject [1467: c07] * Application terminée en raison d'une exception non interceptée 'NSInvalidArgumentException', raison: '- [GADObjectPrivate changeState:]: sélecteur non reconnu envoyé à l'instance 0x95c17d0'.

Cela ressemble à un bug dans la bibliothèque pour moi, mais je pense que c'est très improbable. Des pensées?

EDIT: Le même code fonctionne dans les exemples de projets. Y a-t-il quelque chose que je peux faire de mal avec mon fichier de projet qui pourrait entraîner cette erreur?

51
david

Vous devez ajouter -ObjC au Other Linker Flags du paramètre de construction de votre cible d'application:

  1. Cliquez sur l'icône bleue du projet de niveau supérieur dans XCode.
  2. Choisissez votre cible et allez à Build Settings
  3. Sous Other Linker Flags, ajoutez -ObjC pour Release et Debug.

Source: https://developers.google.com/mobile-ads-sdk/docs/admob/mediation#ios-linker

Veillez également à faire un nettoyage et à reconstruire

171
bart

La meilleure solution pour moi est d'utiliser l'option -force_load -ObjC enter image description here

4
Dmitry Nelepov

Si vous rencontrez toujours des problèmes, assurez-vous que c'est -ObjC et non -Objc. Décidément, j'ai passé des semaines à essayer de comprendre pourquoi.

3
ninjaneer

Pour ceux d'entre vous qui ont essayé d'ajouter l'indicateur de lieur Obj-c et qui ont toujours le même message d'erreur "sélecteur non reconnu envoyé à l'instance" lors de la tentative de chargement d'une annonce, j'ai trouvé un correctif. Ceci est pour le dernier XCode (version 8.1).

Pour référence:

  • J'ai ajouté Google AdMob en utilisant des cocoapodes.
  • J'ai utilisé le storyboard pour établir une connexion de sortie avec mon contrôleur de vue et GADBannerView étant NON disponible en tant que classe, je l'ai écrit comme la plupart des gens. 
  • Sur l'une des réponses stackoverflow, j'ai constaté que la classe personnalisée pour l'aperçu des bannières était définie sur GADBannerView, ce qui, je suppose, se produirait automatiquement s'il s'agissait d'une option dans la liste déroulante lorsque vous avez ajouté le point de vente. Pour moi, ce n'était pas depuis que je devais taper moi-même.

 No custom class specified screengrab

En regardant le menu déroulant, j'ai vu que GADBannerView était disponible en option et je l'ai sélectionné.

 GADBannerView class available

Après l'avoir sélectionnée, l'application s'exécutait sans accroc, inutile d'ajouter l'indicateur de l'éditeur de liens (le mien était vide par défaut) ou quoi que ce soit.

J'espère que ceci aide quelqu'un d'autre!

0
Vrezh Gulyan