- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个使用 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/
这是我的第一个 iAd for iPhone。 在开发模式下,如果我将 iPhone 切换到机场模式,我正在调试的应用程序永远不会收到此事件。 但是,如果我在关闭机场的情况下启动应用程序,我会收到“b
我的应用程序使用的是 iAd,但广告仅在美国、加拿大、西类牙和英国展示。在所有其他国家/地区,我有要求但没有印象。 我为我的完整版应用程序制作了一个自定义横幅图片,每次 iAd 返回 didFailT
我有这个代码: class ViewControllergame: UIViewController, ADBannerViewDelegate { var bannerView:ADBannerV
我在我的 Root View Controller (基于 map 的应用程序)中使用 iAd,每次我在点击工具栏上的注释或按钮后移动到新的 View Controller 时,都会调用 didFai
我正在使用 Swift 和 SpriteKit,一切都在我的 GameViewController 和 GameScene 中完成。 这是与我的 GameViewController 中的广告有关的所
我在我的项目中实现了 iAd 和 AdMob。该结构是如果错误来自 iAd 服务器,应用程序将根据错误广告类型显示 Admob 横幅或插页式广告。插页式效果很好。但不是横幅。我使用了如下所示的功能,并
我有一个使用 iAd 的 iPhone 应用程序,可以回退到 AdMob 广告: - (void)bannerViewDidLoadAd:(ADBannerView *)banner { [U
在美国和其他一些国家(英国、法国、德国、意大利、西类牙、日本/日本)之外,来自 iAd Network 的广告尚未在 iOS 上显示太多。 与此同时,除了使用 AdMob和 the like为了填补空
我在禁用 wifi 的情况下运行我的应用程序,但调试器中总是出现空白和此消息: ADBannerView:未处理的错误(没有委托(delegate)或委托(delegate)未实现 didFailTo
我正在为 iOS7+ 实现一个新的应用程序。在我想显示横幅的 View 中使用 canDisplayBannerAds 与 iAd 横幅的集成似乎很容易。但是我在 Xcode 日志中收到此错误: AD
我有一个使用 xib 定义的 AdBannerView 的应用程序。如果该应用程序在 iPhone(4 或 5)上运行,一切都会按预期运行,显示广告,隐藏/显示横幅等。 但是,如果应用程序在 iPad
这是我使用的代码: var bannerView = ADBannerView() self.canDisplayBannerAds = true //show ad banner if an ad
我是一名优秀的程序员,十分优秀!