Обнаружена ошибка в том, как я удалял 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.