gpt4 book ai didi

ios - 避免递归 bannerView : didFailToReceiveAdWithError: on iPad

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:14:32 24 4
gpt4 key购买 nike

我有一个使用 iAd 的 iPhone 应用程序,可以回退到 AdMob 广告:

- (void)bannerViewDidLoadAd:(ADBannerView *)banner {

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3f];

adBannerView.frame = CGRectMake(0, 410, 320, 50);

[UIView commitAnimations];

// hide the admob ad
if(adMobView != nil && adMobView.superview != nil) {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3f];
adMobView.frame = CGRectMake(0, 460, 320, 48);
[UIView commitAnimations];
}
}

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3f];

// hide banner
adBannerView.frame = CGRectMake(0, 460, 320, 50);
[UIView commitAnimations];

if(adMobView != nil && adMobView.superview != nil) {
[adMobView requestFreshAd];
} else {
adMobView = [AdMobView requestAdWithDelegate:self];
adMobView.frame = CGRectMake(0, 460, 320, 48);
[self.view addSubview:adMobView];
}
}

这在 iPhone 上运行良好。但是,当应用程序在 iPad 上运行时,这会递归; [self.view addSubview:adMobView];(特别是对“self.view”的调用)根据 the ViewController.view reference 调用 loadView ,它会再次尝试布局 AdBannerView,这会再次触发失败。

我认为这与 iPad 上的窗口边界比 iPhone 上的更大/不同,以及决定是否尝试加载 AdBanner 的规则有关。

一个解决方案可能是调整我硬编码的边界,使其更远(因此在 iPad 的更大范围之外)。另一种解决方案是完全避免 self.view 调用/递归的风险并以另一种方式进行 - 然而,AdMobView 有点挑剔并且真的想通过 requestAdWithDelegate 实例化,如果我把它放在 viewDidLoad 中。

哪种方法是明智的?

最佳答案

我在 iPad 上遇到了类似的问题,只是所有以 self.view 开头的调用都导致了 bannerView:didfailToReciveAdWithError 上的递归错误。我认为这与调用 didfailToReciveAdWithError 方法时 self.view 中的 View 尚未分配有关。为了修复它,我从该方法中删除了对 self.anything 的所有调用。

关于ios - 避免递归 bannerView : didFailToReceiveAdWithError: on iPad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11641478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com