3

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];

    }
}
4

2 に答える 2

2

initWithAdTypeにはiOS6.0以降が必要です。iOS 5.xデバイスでテストしている場合は、クラッシュが表示されます。古いデバイスでADBannerViews(initWithFrameなど)を初期化する古い方法を使用します。

これは、initWithAdTypeのiOS6.0宣言です。

- (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;
}
于 2012-11-27T22:12:00.503 に答える
0

なぜこのように使用しているのかわかりませんが、以下はAppleのドキュメントに記載されているものです。

ADBannerView *adView = [[ADBannerView alloc] initWithFrame:CGRectZero];
adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;
adView.delegate = self;
[[[CCDirector sharedDirector] view] addSubview:adView];
于 2012-11-21T08:47:15.893 に答える