我正在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];
}
}
答案 0 :(得分:2)
initWithAdType 需要 iOS 6.0或更高版本。如果您在iOS 5.x设备上进行测试,您将看到崩溃。使用在旧设备上初始化ADBannerViews(例如,initWithFrame)的旧方法。
这是initWithAdType的iOS 6.0声明:
- (id)initWithAdType:(ADAdType)type __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_6_0);
要支持旧iOS5创建iAd横幅的方式,您需要添加:
#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;
}
答案 1 :(得分:0)
我不知道你为什么使用这种方式,但下面是Apple的文档中提到的那个:
ADBannerView *adView = [[ADBannerView alloc] initWithFrame:CGRectZero];
adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;
adView.delegate = self;
[[[CCDirector sharedDirector] view] addSubview:adView];