iAds:bannerViewDidLoadAd在第一次执行didFailToReceiveAdWithError后不再调用

时间:2011-07-13 10:12:54

标签: iphone objective-c xcode iad

我在XCode 4中测试iAd。

一切正常,直到第一次收到bannerView:didFailToReceiveAdWithError:,我通过在屏幕上滑动横幅做出反应。

//move the ad back off the screen if an error occurs
- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {
    if (self.bannerIsInScreenBounds)
    {
        [UIView beginAnimations:@"animateAdBannerOff" context:NULL];
        // move the banner view off the screen.
        banner.frame = CGRectOffset(banner.frame, 320, 0);
        [UIView commitAnimations];
    }
}

之后,不再向ADBannerViewDelegate发送bannerViewDidLoadAd:条消息。我正在将该方法记录在顶部,它不再被调用。

我没有发布横幅或任何东西,ADBannerViewDelegate类仍然在那里并做其他事情。

可能出现什么问题?

感谢。

3 个答案:

答案 0 :(得分:0)

为什么你希望它在发生错误后加载广告 - 我认为这是正确的行为。

查看评论显示错误为“操作无法完成。广告资源不可用”。

如果找不到任何广告,你如何期望它给你广告;)

答案 1 :(得分:0)

好的,不是理想的解决方案,但这就是我最终做的事情。

每当我收到didFailToReceiveAdWithError时,我等待10秒钟(以避免因失败而发送垃圾邮件),然后重新创建横幅。

-(void)replaceAdView {
    UIView *adViewSuperview = [adView superview];
    [adView removeFromSuperview];
    [adView release];
    //starting off the screen again
    adView = [[NSClassFromString(@"ADBannerView") alloc] initWithFrame:CGRectMake(320, 382, 320, 50)];
    adView.delegate = self;
    if (adViewSuperview) {
        [adViewSuperview addSubview:adView];
    }
    self.bannerIsInScreenBounds = NO;
}

答案 2 :(得分:0)

作为我在how to implement AdBannerview and ADBannerview delegate的评论,在ipad模拟器中运行iphone应用程序,我在设置ADBannerView委托时立即获得didFailToReceiveAdWithError,而从未进行另一次委托调用。在iphone模拟器上运行它(或将应用程序目标更改为通用),只有在将ADBannerView添加为子视图后才会调用该委托,然后每隔30秒委派一次调用。