1

iAdSuiteをダウンロードし、 ADBannerNavigationを調べました。

内部では、iAd バナーのサイズ変更を利用するために、RootViewController をサブクラス TextViewController に変更しました。RootViewにも広告を表示したい。

これが RootViewController.h になりました。

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

@interface RootViewController : TextViewController

@end

他のすべては同じです。コンパイルして実行すると、RootView に広告が表示されず、TextView をクリックすると突然広告が表示されます。

クリックして戻ると、RootView に空白ができます。

なぜ?空白をどのように削除しますか?

4

1 に答える 1

0

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 メソッドから削除することで問題が解決しました。

于 2011-07-19T14:46:07.210 に答える