AdMob与[GADObjectPrivate changeState:]崩溃:无法识别的选择器

时间:2012-09-28 07:12:29

标签: iphone objective-c 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 “

对我来说这看起来像库中的一个错误,但我认为这不太可能。有什么想法吗?

编辑:完全相同的代码适用于示例项目。我的项目文件有什么问题可以导致错误吗?

4 个答案:

答案 0 :(得分:171)

您需要将-ObjC添加到应用程序目标的构建设置的其他链接器标志中:

  1. 单击XCode中的蓝色顶级项目图标
  2. 选择目标并转到构建设置
  3. 其他链接器标志下为发布调试添加-ObjC
  4. 来源:https://developers.google.com/mobile-ads-sdk/docs/admob/mediation#ios-linker

    另外一定要做一个干净的重建

答案 1 :(得分:4)

对我来说,最好的解决方案是使用-force_load标志而不是-ObjC enter image description here

答案 2 :(得分:3)

如果你们仍然遇到麻烦,请确保它是-ObjC而不是-Objc。 Geez花了几周的时间试图找出原因。

答案 3 :(得分:0)

对于那些尝试添加Obj-c链接器标志并且在尝试加载广告时仍然遇到相同的“无法识别的选择器发送到实例”错误的人,我发现了一个修复程序。这是针对最新的XCode(版本8.1)。

供参考:

  • 我使用cocoapods添加了Google AdMob。
  • 我使用storyboard与我的viewcontroller建立了一个插座连接,GADBannerView是 NOT 作为一个类可用,所以我像大多数人一样编写它。
  • 在其中一个stackoverflow答案中,我看到bannerview的自定义类设置为GADBannerView,我认为如果它是添加插座时下拉列表中的选项,则会自动发生。对我而言,因为我不得不自己打字。

No custom class specified screengrab

查看下拉列表,我看到GADBannerView作为选项提供并选中它。

GADBannerView class available

选择它之后,应用程序顺利运行,无需添加链接器标志(默认情况下我的是空白)或其他任何内容。

希望这有助于其他人!