配置 iAD 后应用程序在设备上崩溃,但在模拟器上没有

Posted

技术标签:

【中文标题】配置 iAD 后应用程序在设备上崩溃,但在模拟器上没有【英文标题】:App crash on device after config iAD but not on simulator 【发布时间】:2012-11-21 07:39:40 【问题描述】:

我正在 cocos2d 上创建一个应用程序。 我配置了 iAd,但我不知道我的应用程序在设备上崩溃了,但是当我在模拟器上运行应用程序时它工作正常。

错误:

[ADBannerView initWithAdType:]: unrecognized selector sent to instance  

代码:

- (void)createAdBannerView 
    Class classAdBannerView = NSClassFromString(@"ADBannerView");
    if (classAdBannerView != nil) 

        _adBannerView = [[classAdBannerView alloc] initWithAdType:ADAdTypeBanner];

        [_adBannerView setPosition:ccp([[CCDirector sharedDirector] winSize].width/2, -33)];

        [_adBannerView setDelegate:self];

        [[[CCDirector sharedDirector] view] addSubview:_adBannerView];

    

【问题讨论】:

【参考方案1】:

initWithAdType 需要 ios 6.0 或更高版本。如果您在 iOS 5.x 设备上进行测试,您会看到崩溃。在旧设备上使用旧的方式初始化 ADBannerViews(例如 initWithFrame)。

这是 iOS 6.0 的 initWithAdType 声明:

- (id)initWithAdType:(ADAdType)type __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_6_0);

要支持创建 iAd 横幅的旧 iOS5 方式,您需要添加:

#import <iAd/ADBannerView_Deprecated.h>

示例代码:

ADBannerView *iAdView = nil;
if ([[ADBannerView class] instancesRespondToSelector:@selector(initWithAdType:)])  // iOS 6.0
    iAdView = [[[ADBannerView alloc] initWithAdType:ADAdTypeBanner] autorelease];
 else  // iOS 4.x-5.x
    iAdView = [[[ADBannerView alloc] initWithFrame:CGRectMake(0, 0, appleWidth_, appleHeight_)] autorelease];
    iAdView.currentContentSizeIdentifier = isLandscape_ ? ADBannerContentSizeIdentifierLandscape : ADBannerContentSizeIdentifierPortrait;

【讨论】:

【参考方案2】:

我不知道你为什么使用这种方式,但下面是苹果文档中提到的:

ADBannerView *adView = [[ADBannerView alloc] initWithFrame:CGRectZero];
adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;
adView.delegate = self;
[[[CCDirector sharedDirector] view] addSubview:adView];

【讨论】:

以上是关于配置 iAD 后应用程序在设备上崩溃,但在模拟器上没有的主要内容,如果未能解决你的问题,请参考以下文章

应用程序在 iPad 设备上崩溃但在模拟器上运行

应用程序在模拟器上运行良好,但在真实设备上崩溃

应用程序在少数模拟器上运行,但在真实设备上崩溃 [重复]

AVPlayer 导致模拟器崩溃但在设备上运行良好

iAd 横幅显示在模拟器上,但不显示在设备上

React-Native 应用程序在 android 设备上立即崩溃,但在模拟器上运行良好