web-dev-qa-db-ja.com

[GADObjectPrivate changeState:]でAdMobがクラッシュする:認識できないセレクター

AdMob SDK 6.2.0(Xcode 4.5(4G182)をインストールし、iPhone 4Sとシミュレーターでテストしています)。チュートリアルに従って、AdMobに一度バナーを表示させたいだけです。しかし、最後の行でクラッシュします:

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];

クラッシュは

2012-09-28 09:03:58.268 NewProject [1467:c07]-[GADObjectPrivate changeState:]:認識されないセレクターがインスタンス0x95c17d0に送信されました2012-09-28 09:03:58.276 NewProject [1467:c07] *キャッチされない例外 'NSInvalidArgumentException'によるアプリの終了、理由: '-[GADObjectPrivate changeState:]:認識されないセレクターがインスタンス0x95c17d0に送信されました'

これはライブラリのバグのように見えますが、それは非常にありそうにないと思います。何かご意見は?

編集:サンプルプロジェクトでもまったく同じコードが機能します。私のプロジェクトファイルで間違ってできることがあり、そのエラーが発生する可能性はありますか?

51
david

_-ObjC_をアプリケーションターゲットのビルド設定のOther Linker Flagsに追加する必要があります。

  1. XCodeの青いトップレベルプロジェクトアイコンをクリックします
  2. ターゲットを選択して、ビルド設定に移動します
  3. その他のリンカーフラグの下に、両方のRelease-ObjC_ デバッグ

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

また、必ずクリーンと再構築を実行してください

171
bart

私にとって最善の解決策は、代わりに-force_loadフラグを使用することです-ObjC enter image description here

4
Dmitry Nelepov

それでも問題が解決しない場合は、-Objcではなく-ObjCであることを確認してください。ジーズ、何週間かかけて理由を突き止めました。

3
ninjaneer

Obj-cリンカーフラグを追加しようとしても、広告を読み込もうとしたときに同じ「認識されないセレクターがインスタンスに送信されました」というエラーが表示される場合は、修正が見つかりました。これは最新のXCode(バージョン8.1)用です。

参考のために:

  • ココアポッドを使用してGoogle AdMobを追加しました。
  • ビューコントローラーへのアウトレット接続を作成するためにストーリーボードを使用しましたが、GADBannerViewは[〜#〜] not [〜#〜]クラスとして利用できなかったので、ほとんどの人が書いたように書きました。
  • Stackoverflowの回答の1つで、bannerviewのカスタムクラスがGADBannerViewに設定されているのを確認しました。これは、アウトレットを追加したときにドロップダウンリストのオプションである場合に自動的に発生します。私にとっては、自分で入力しなければならなかったからではありません。

No custom class specified screengrab

ドロップダウンを見ると、GADBannerViewがオプションとして利用可能であることがわかり、選択しました。

GADBannerView class available

それを選択した後、アプリは問題なく実行され、リンカーフラグを追加する必要はありませんでした(既定では空でした)。

これが他の誰かに役立つことを願っています!

0
Vrezh Gulyan