Пробел ADBannerNavigation, где должно быть объявление при отображении контроллера - PullRequest
1 голос
/ 16 июля 2011

Я скачал iAdSuite и посмотрел ADBannerNavigation.

Внутри я изменил RootViewController на подкласс TextViewController, чтобы воспользоваться преимуществами изменения размера баннера iAd. Я также хочу показывать рекламу в RootView.

Теперь это RootViewController.h:

#import <UIKit/UIKit.h>
#import "TextViewController.h"

@interface RootViewController : TextViewController

@end

Все остальное тоже самое. Когда я компилирую и запускаю, в RootView не отображаются объявления, а когда я нажимаю на TextView, объявления внезапно появляются.

Когда я нажимаю, чтобы вернуться, в RootView теперь есть пробел.

Почему? Как убрать пробел?

1 Ответ

0 голосов
/ 19 июля 2011

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

...