【问题标题】:how to implement AdBannerview and ADBannerview delegate如何实现 AdBannerview 和 ADBannerview 委托
【发布时间】:2011-02-27 20:15:01
【问题描述】:

我在实现 ADBannerView 及其委托协议时遇到了问题。

我在视图类中实现了以下代码(也使视图符合 ADBannerViewDelegate 协议):

//add iAds
ADBannerView *adView = [[ADBannerView alloc] initWithFrame: CGRectMake(0, 318, 320, 50)];
adView.requiredContentSizeIdentifiers = [NSSet setWithObjects: ADBannerContentSizeIdentifierPortrait, ADBannerContentSizeIdentifierLandscape, nil];
adView.delegate = self; 
//adView.delegate = ADBannerViewDelegate;
[self.view addSubview: adView];

然后我为 ADBannerViewDelegate 创建了一个类,带有以下 .m

//
//  ADBannerViewDelegate.m
//

#import "ADBannerViewDelegate.h"

@implementation ADBannerViewDelegate

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error{
    NSLog(@"bannerview did not receive any banner due to %@", error);}

- (void)bannerViewActionDidFinish:(ADBannerView *)banner{NSLog(@"bannerview was selected");}

- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave{return willLeave;}

- (void)bannerViewDidLoadAd:(ADBannerView *)banner {NSLog(@"banner was loaded");}

@end

最终会显示横幅,但控制台不断抛出以下类型的错误:

2011-02-27 15:00:54.108 app[31639:207] ADBannerView: Unhandled error (no delegate or delegate does not implement didFailToReceiveAdWithError:): Error Domain=ADErrorDomain Code=5 "The operation couldn’t be completed. Banner view is visible but does not have content" UserInfo=0x6356a40 {ADInternalErrorCode=5, NSLocalizedFailureReason=Banner view is visible but does not have content}

并且委托函数没有做任何事情,所以根本没有 NSLog。显然没有发现错误。

我被难住了。我想我在视图和委托中的 Adbanner 视图调用的链接中遗漏了一些东西。不知道该怎么做或出了什么问题。

有什么帮助吗?提前致谢。

杰森

【问题讨论】:

    标签: iphone cocoa iad


    【解决方案1】:

    为什么你告诉 AdbannerView 你是它的代表,但你从来没有把它放在你的实现文件中。你的实现文件应该是这样的(注意@implmentation这一行):

    //
    //  ADBannerViewDelegate.m
    //
    
    #import "ADBannerViewDelegate.h"
    
    @implementation ADBannerViewDelegate<ADBannerViewDelegate>
    
    - (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error{
        NSLog(@"bannerview did not receive any banner due to %@", error);}
    
    - (void)bannerViewActionDidFinish:(ADBannerView *)banner{NSLog(@"bannerview was selected");}
    
    - (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave{return willLeave;}
    
    - (void)bannerViewDidLoadAd:(ADBannerView *)banner {NSLog(@"banner was loaded");}
    
    @end
    

    你也不应该将你的类命名为ADBannerViewDelegate。您的类应该是 ADBannerView 的委托(响应它),但不能以它命名。

    【讨论】:

    • 方法要注意:bannerViewActionShouldBegin。逻辑可以是自定义的,但通常最好返回 YES。应用内提供了许多广告(因此 willLeave 通常为 NO),但根据此值返回将阻止广告完全投放(当 NO 时),因此根据 AdBannerViewDelegate 协议参考 (developer.apple.com/library/ios/documentation/UserExperience/…) 会减少可赚取的收入)。
    • 我有点困惑,接口不是需要符合协议而不是实现。当我在实现中编写 ADViewBannerDelete 时,我正在测试项目中尝试这个,xcode 抛出了这个错误。 @implementation 声明不能是协议限定的
    【解决方案2】:

    我使用本教程成功地将 iAds 集成到我的应用中:
    http://www.raywenderlich.com/1371/how-to-integrate-iad-into-your-iphone-app
    也可以帮到你。

    【讨论】:

      【解决方案3】:

      您不要尝试实现名为ADBannerViewDelegate 的类,而是将这些方法放入视图类的实现中。

      (如果您实际上将视图类命名为“ADBannerViewDelegate”,请不要这样做。这会造成混淆。)

      【讨论】:

      • 谢谢。我试图做的是创建一个泛型类,它充当具有所有功能的委托。原因是我有一堆不同的视图,它们以我显示的方式调用 Adbanner,并且不想用相同的代码乱扔所有视图控制器。
      • 那么您不应该分配adView.delegate = self;,您应该创建一个泛型类的实例并将其分配为委托。在这种情况下,您的视图不需要遵守 AdBannerViewDelegate 协议。
      【解决方案4】:

      对我来说它是目标和设备,我在 4.3 模拟器和我的 ipad 2 上运行它,但该应用程序是为 iphone 5.1 运行的,当我更改目标时,一切顺利

      【讨论】:

      • +1 在 ipad 模拟器中运行 iphone 应用程序我在设置 ADBannerView 委托时立即收到了 didFailToReceiveAdWithError 错误,而不再是另一个委托调用。在 iphone 模拟器上运行它(或将应用程序目标更改为通用),仅在将 ADBannerView 添加为子视图后才调用委托,此后每 30 秒委托调用一次。
      【解决方案5】:

      你可以使用这个链接,它非常有帮助

      http://codewithchris.com/iad-tutorial/

      【讨论】:

        猜你喜欢
        • 2013-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多