我有一个基于标签的应用程序。我在app delegate类中创建了一个iAd对象,并在我的三个视图控制器类中使用它。它在第二个标签的屏幕和第三个标签的屏幕上运行良好。在第二个选项卡上有一个表视图,当单击该表视图的行时,我导航到新视图,其中我使用了相同的iAd代码。单击iAd时,iAd屏幕将以横向模式打开,当关闭屏幕变为黑色并记录以下内容时。
[ADHostWindowController supportsOrientation:]: message sent to deallocated instance 0x100bc740
我在app delegate中创建了这样的对象:
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。我该如何解决这个问题?
答案 0 :(得分: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);
}
}
答案 1 :(得分:1)
我的猜测你的问题与iAds无关,而是与内存问题有关。
类似ADHostWindowController
类的对象似乎过早被解除分配。
我的建议是在调用supportsOrientation:之前确保ADHostWindowController 未释放,即(retainCount> = 1)。 (肯定是在iAd打开之后)。
用于诊断:在打开iAd之前尝试记录该ADHostWindowController的保留计数(然后可能再保留一次),看看会发生什么。