升级Google-Mobile-Ads-SDK后iOS App崩溃:报错“GADMediaContent setDelegate”未识别选择器
解决升级Google Mobile Ads SDK后“GADMediaContent setDelegate”未识别选择器崩溃问题
这个崩溃的核心原因很明确:Google Mobile Ads SDK在7.32.0之后的版本中,彻底移除了GADMediaContent类的setDelegate:方法——你之前在旧版本里依赖的这个API已经被废弃并删除,调用它自然会触发"unrecognized selector sent to instance"的崩溃。
下面是具体的修复步骤和替代方案:
- 第一步:定位代码中所有调用
[GADMediaContent setDelegate:]或mediaContent.delegate = self的位置,这些就是崩溃的触发点。 - 第二步:根据你使用的广告类型,替换为对应的新回调逻辑:
- 如果你在用激励广告(GADRewardedAd)或插屏广告(GADInterstitialAd):媒体相关的事件(播放开始/结束/错误等)已经整合到广告自身的delegate协议中,比如
GADRewardedAdDelegate新增了对应媒体事件的回调方法,直接通过广告delegate处理即可。 - 如果你是直接使用
GADMediaView:应该给GADMediaView设置delegate(遵循GADMediaViewDelegate协议),用这个来监听媒体播放的各类事件,而非给GADMediaContent设置delegate。
- 如果你在用激励广告(GADRewardedAd)或插屏广告(GADInterstitialAd):媒体相关的事件(播放开始/结束/错误等)已经整合到广告自身的delegate协议中,比如
举个代码替换的例子:
旧版本代码(崩溃触发点):
GADMediaContent *mediaContent = [[GADMediaContent alloc] init]; [mediaContent setDelegate:self]; // 其他媒体内容配置
新版本替换为(以GADMediaView为例):
GADMediaView *mediaView = [[GADMediaView alloc] init]; mediaView.delegate = self; // 改用GADMediaView的delegate mediaView.mediaContent = mediaContent;
同时,记得让你的类遵循GADMediaViewDelegate协议,并实现所需的回调方法,比如:
- (void)mediaViewDidStartPlayback:(GADMediaView *)mediaView { // 处理媒体开始播放逻辑 } - (void)mediaViewDidEndPlayback:(GADMediaView *)mediaView { // 处理媒体结束播放逻辑 }
最后,建议清理Xcode的Build Folder(快捷键Cmd+Shift+K),重新安装SDK依赖,确保旧版本的二进制文件和缓存被彻底清除,避免残留问题。
内容的提问来源于stack exchange,提问作者Mahfuz
相关产品推荐
相关产品推荐

