ADBannerView の削除方法にエラーが見つかりました。
iAd Suite は次のように指示します。
注: iAd バナーを表示する複数のタブまたはビューがアプリケーションにある場合は、各ビューで ADBannerView の 1 つのインスタンスを必ず共有してください。次に、ユーザーが新しいビューに移動する前に、共有インスタンスのデリゲート プロパティを 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];
}
ブレークポイントを設定すると、ビューを終了すると、view1 で viewWillDisappear が呼び出され、次に view0 で viewWillAppear が呼び出され、次に view1 で割り当てが解除されることがわかりました。
問題は、ビュー 1 がビューから ADBannerView を既に削除していたため、[adBanner removeFromSuperView] がビュー 0 から広告を削除していたことです。
問題のあるコードを dealloc メソッドから削除することで問題が解決しました。