发现我如何删除 ADBannerView 的错误。
iAd Suite 告诉我们:
注意:如果您的应用程序有多个显示 iAd 横幅的选项卡或视图,请确保在每个视图中共享一个 ADBannerView 实例。然后,在您的用户导航到新视图之前,将共享实例的委托属性设置为 nil,将其从旧视图层次结构中删除,然后将相同的实例添加到打开的视图并将其委托设置为适当的视图控制器。“AdbannerNavigation”示例展示了这种技术。
所以,在我的 iADBannerView.m 中,我有:
- (void)viewWillDisappear:(BOOL)animated{
[self removeADBannerFromView];
[super viewWillDisappear:animated];
}
- (void)removeADBannerFromView{
NSLog(@"ad removed from view");
ADBannerView *adBanner = SharedAdBannerView;
adBanner.delegate = nil;
[adBanner removeFromSuperview];
}
- (void)dealloc{
// we are being called here when we navigate away from this view controller,
// so go ahead and reset our AdBannerView for the next time
//
ADBannerView *adBanner = SharedAdBannerView;
adBanner.delegate = nil;
[adBanner removeFromSuperview];
[contentView release]; contentView = nil;
[super dealloc];
}
通过设置断点,我看到通过退出视图,viewWillDisappear 在 view1 上被调用,然后 viewWillAppear 在 view0 上被调用,然后在 view1 上被释放。
问题是 view1 已经从视图中删除了 ADBannerView,因此 [adBanner removeFromSuperView] 正在从 view0 中删除广告。
通过从 dealloc 方法中删除违规代码解决了问题。