Google admob GADBannerView无法识别的选择器

时间:2016-05-27 17:14:14

标签: ios frameworks admob

在我的项目中包含GoogleMobileAdvertising.framework并确保搜索路径找到它后,以下代码行仍会导致无法识别的选择器错误。

GADBannerView* gadBannerView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeSmartBannerLandscape];

是的,我已经设置了-ObjC链接器标志。 是的,我已经包含了所有其他必需的框架。 不,这不是一个重复的问题。已经发布了一个类似的问题,但是一个 是一个缺少-ObjC标志的情况。这个标志非常明显,因为该标志存在。

如果我将分配和初始化分成不同的行。 e.g。

GADBannerView* gadBannerView = [GADBannerView alloc];
[gadBannerView initWithAdSize:kGADAdSizeSmartBannerLandscape];

然后错误发生在第二行,即initWithAdSize。

错误是

[UIApplication window]: unrecognized selector sent to instance 0x14e888b0

哪个没有多大意义。为什么initWithAdSize甚至调用" window"作为选择器? UIApplicationDelegate协议将其列为属性。

@property (nullable, nonatomic, strong) UIWindow *window NS_AVAILABLE_IOS(5_0);

即便如此,在这种情况下实现UIApplicationDelegate的类确实具有该属性。我可以理解错误,如果它是

[UIApplication setWindow]: unrecognized selector

[UIApplication getWindow]: unrecognized selector

但它不是。

1 个答案:

答案 0 :(得分:1)

好的,事实证明答案是在该代表的子类中。它有"窗口"作为成员UIWindow *而不是作为属性实现。因此,当AdMob库试图在该属性上调用getter时,它就不存在了。修复它以正确实现它作为属性(然后修复该类中突然赢得编译的所有其他内容,因为它试图以成员身份访问该属性)修复了无法识别的选择器错误。

我承认有一定程度的满意,有关代表不是我的代码。