首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iAd横幅错误“iAd实例太多”

iAd横幅错误“iAd实例太多”
EN

Stack Overflow用户
提问于 2014-07-12 13:57:27
回答 3查看 357关注 0票数 2

我在我的一个视图控制器上有一个广告横幅视图,作为我的游戏的指导页面。当视图控制器被多次加载时,我收到以下错误。

代码语言:javascript
复制
WARNING: More than 10 instances of ADBannerView or ADInterstitialView currently exist. This is a misuse of the iAd API, and ad performance will suffer as a result. This message is printed only once.

我已经在stackoverflow上搜索了这个错误,阅读了响应,但没有对我起作用。我已经读到,你的意思是释放广告横幅,然后没有它等,我有,仍然收到这个错误。我的"viewWillAppear“和"viewWillDissapear”的代码如下。任何帮助都将不胜感激!

代码语言:javascript
复制
-(void) viewWillAppear:(BOOL)animated {

[super viewWillAppear:animated];

_adBanner = [[ADBannerView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height, 320, 50)];
_adBanner.delegate = self;
[self.view addSubview:_adBanner];

}

代码语言:javascript
复制
-(void) viewWillDisappear:(BOOL)animated {

[super viewWillDisappear:animated];

if (_adBanner != nil) {
    _adBanner.delegate = nil;
    _adBanner.hidden = YES;
    [_adBanner release];
    _adBanner = nil;

}

}

EN

回答 3

Stack Overflow用户

发布于 2014-07-12 14:00:59

在将iAd设置为nil之前,请尝试将其从其superview中删除:

代码语言:javascript
复制
-(void) viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];

    if (_adBanner != nil) {
        [_adBanner removeFromSuperview]; // <-new line

        _adBanner.delegate = nil;
        _adBanner.hidden = YES;
        [_adBanner release];
        _adBanner = nil;
}
票数 0
EN

Stack Overflow用户

发布于 2014-07-13 19:34:52

以下是我已经在我的应用程序中使用的iAd代码,没有问题:

代码语言:javascript
复制
implementation ViewController
{
    ADBannerView *adView;
    BOOL bannerIsVisible;
}

- (void)viewDidLoad
{
    [super viewDidLoad];


    adView = [[ADBannerView alloc] initWithFrame:CGRectZero];
    adView.frame = CGRectOffset(adView.frame, 0, -50);
    adView.requiredContentSizeIdentifiers = [NSSet setWithObject:ADBannerContentSizeIdentifier320x50];
    adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifier320x50;
    [self.view addSubview:adView];
    adView.delegate=self;
    bannerIsVisible=NO;
}

- (void)bannerViewDidLoadAd:(ADBannerView *)banner
{
    if (!bannerIsVisible)
    {
        [UIView beginAnimations:@"animateAdBannerOn" context:NULL];
        // banner is invisible now and moved out of the screen on 50 px
        banner.frame = CGRectOffset(banner.frame, 0, 50);
        [UIView commitAnimations];
        bannerIsVisible = YES;
    }
}

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
    if (bannerIsVisible)
    {
        [UIView beginAnimations:@"animateAdBannerOff" context:NULL];
        // banner is visible and we move it out of the screen, due to connection issue
        banner.frame = CGRectOffset(banner.frame, 0, -50);
        [UIView commitAnimations];
        bannerIsVisible = NO;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2014-07-27 13:23:28

不是在单个类中初始化adBannerView,而是在AppDelegate中创建它。

我放了:

代码语言:javascript
复制
@property (strong, nonatomic) ADBannerView *adBanner;

在我的AppDelegate.h中:

代码语言:javascript
复制
self.adBanner = [[ADBannerView alloc] init];

在我的AppDelegate.m

然后在单个类中,我添加了:

代码语言:javascript
复制
@property (strong, nonatomic) ADBannerView *adBanner;

在.h和.m中,我放入:

代码语言:javascript
复制
{
    BOOL _bannerIsVisible;
}

就在@interface下面,在@implementation中我放了:

代码语言:javascript
复制
#pragma mark Ads




- (WTMAppDelegate *) appdelegate {
    return (WTMAppDelegate *)[[UIApplication sharedApplication] delegate];
}

- (void)bannerViewDidLoadAd:(ADBannerView *)banner
{
    NSLog(@"Retreieved Ad");
    [self bringBannerBack];

}

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
    NSLog(@"Failed to retrieve ad");

    [self moveBannerViewOffScreen];
}

- (void)bringBannerBack
{



    [self.adBanner setAlpha:1];
    [self.adBanner setNeedsDisplay];
    [UIView beginAnimations:@"MoveView" context:nil];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
    [UIView setAnimationDuration:0.1];
    self.adBanner.frame = CGRectMake(0, self.view.bounds.size.height - 50, 320, 50);
    [UIView commitAnimations];
    _bannerIsVisible = YES;
    [self.adBanner setAlpha:1];

}
//Move the banner off the screen.
- (void)moveBannerViewOffScreen
{

    [self.adBanner setAlpha:0];
    [self.adBanner setNeedsDisplay];
    _bannerIsVisible = NO;

}

在viewWillAppear和ViewWillDisappear中:

代码语言:javascript
复制
- (void) viewWillDisappear:(BOOL)animated{


    self.adBanner.delegate=nil;
    self.adBanner=nil;
    [self.adBanner removeFromSuperview];


}


- (void) viewWillAppear:(BOOL)animated
{
    self.adBanner = [[self appdelegate] adBanner];
    self.adBanner.delegate = self;
    [self.view addSubview:self.adBanner];

    if (self.adBanner.bannerLoaded == NO){
        NSLog(@"NO initial banner loaded");
        [self moveBannerViewOffScreen];
    } else {
        NSLog(@"Initial ad loaded");
        [self bringBannerBack];
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24710106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档