1

我有一个基于标签的应用程序。我在应用委托类中创建了一个 iAd 对象,并在我的三视图控制器类中使用它。它在第二个选项卡的屏幕和第三个选项卡的屏幕上运行良好。在第二个选项卡上有一个表格视图,当单击该表格视图的行时,我导航到新视图,我在其中为 iAd 使用了相同的代码。单击 iAd 时,iAd 屏幕以横向模式打开,关闭屏幕时变为黑色并记录以下内容。

[ADHostWindowController supportsOrientation:]: message sent to deallocated instance 0x100bc740

我在应用程序委托中创建了这样的对象:

self.bannerView = [[ADBannerView alloc]init];
[self.bannerView setDelegate:self];

我在这样的视图控制器中添加横幅:

[[[self appdelegate] bannerView] setFrame:CGRectMake(0, hightofView-180, 768, 66)]

我所有的视图控制器都是纵向的,但 iAd 总是以横向模式打开。这适用于 iOS 6,但不适用于 iPad 上的 iOS 5。我该如何解决?

4

2 回答 2

1

查看 Apple 的 iAd 示例中的 TabbleBanner 代码:https ://developer.apple.com/library/ios/#samplecode/iAdSuite/Introduction/Intro.html

我没有详细调查,但您需要遵循 Apple iAd 指南:https ://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/iAd_Guide/BannerAdvertisements/BannerAdvertisements.html

要创建一个 ADBanner,在每个 UIViewController 中,添加一个到 self.view

@property (strong,nonatomic) ADBannerView *bannerView;
- (void)viewDidLoad
{
    [super viewDidLoad];
    [self createADBanner];
}

- (void)createADBanner{
    self.bannerView = [[ADBannerView alloc] initWithFrame:CGRectZero];
    self.bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;
    [self.bannerView setDelegate:self];
    [self.view addSubview:self.bannerView];
}

首先,如果需要将其放置在顶部或底部,则需要修改bannerView 的大小和setCenter。

- (void)viewDidLayoutSubviewsj{
    if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) {
        self.bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierLandscape;
        self.bannerView.center = CGPointMake(self.view.center.x, self.view.frame.size.height - self.bannerView.frame.size.height/2);
    } else {
        self.bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;
        self.bannerView.center = CGPointMake(self.view.center.x, self.view.frame.size.height - self.bannerView.frame.size.height/2);
    }
}

旋转时做同样的事情:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
    if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {
        self.bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierLandscape;
        self.bannerView.center = CGPointMake(self.view.center.x, self.view.frame.size.height - self.bannerView.frame.size.height/2);
    } else {
        self.bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;
        self.bannerView.center = CGPointMake(self.view.center.x, self.view.frame.size.height - self.bannerView.frame.size.height/2);
    }
}
于 2013-04-22T02:22:34.973 回答
1

我猜您的问题与 iAd 无关,而是与内存问题有关。似乎类对象ADHostWindowController被过早地释放。

我的建议是确保在调用 supportsOrientation: 之前不释放ADHostWindowController,即 (retainCount>=1)。(这肯定是在 iAd 打开之后)。

诊断:在打开 iAd 之前尝试记录该 ADHostWindowController 的保留计数(然后可能再保留一次),看看会发生什么。

于 2013-04-23T13:12:55.213 回答