5

奇妙な質問です。私は何時間もこの壁に頭をぶつけていましたが、解決できませんでした。

ストーリーボードを使用する iOS 7 専用アプリがあります。メインのルート ビュー コントローラーで、self.canDisplayBannerAds = YES を使用して、ビューの下部に iAd バナーを表示します。これは完全に機能します。

設定ビュー コントローラーがあり、そこからユーザーはアプリ内購入を行って広告を完全に削除できます。その機能も同様に機能します。BOOL 値を NSUserDefaults standardUserDefaults に保存して、購入したかどうかを追跡します。

私を困惑させているのは、ユーザーがバナーで広告を受け取り、設定ビューコントローラーに移動し、次に購入ビューコントローラーに移動し、購入を成功させてからメインルートビューに戻った場合、バナー広告が表示されたままになることです. ユーザーがアプリを完全に終了してから再起動すると、再び表示されません。これは、viewWillAppear でバナーを表示する方法です。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
bool saved = [defaults boolForKey:t_Save];

if (saved == NO) {
    self.canDisplayBannerAds = YES;
} else if (saved == YES) {
    self.canDisplayBannerAds = NO;
}
NSLog(self.canDisplayBannerAds ? @"YES" : @"NO");

したがって、このロジックは、ユーザーが購入または復元した後にアプリを再起動したときに正常に機能します。しかし、私は彼らが購入した直後にビューを更新したい. しかし、彼らが最初にアプリを起動したときにそこにあったばかげたバナー広告をアプリから消すことは、私の人生ではできません。

self.canDisplayBannerAds = NO を設定するだけのボタンを作成すると、バナー広告が消えます。しかし、viewWillAppear、viewDidAppear、または購入後に呼び出される作成した専用メソッドで呼び出されても機能しません。

バナービューがどこかのキャッシュに設定されていて、nil'ed になっていないのではないかと考えていましたが、それを強制する方法がわかりません。また、ルートView Controllerを強制的にnilにして最初からやり直すことができるかどうかも考えていましたが、それを強制する方法もわかりません。

誰にも考えはありますか?

4

2 に答える 2

6

私は同じ問題を抱えていて、私のために働く回避策を見つけました:

self.canDisplayBannerAds = NO;
for (id aView in self.view.subviews) {
  if ([aView isKindOfClass:[ADBannerView class]]) {
     [(ADBannerView *)aView setHidden:YES];
  }
}

これはきれいな解決策ではないと思いますが、最終的には機能しているので、より良い解決策が見つかるまで保持します.

于 2014-01-02T22:42:15.107 に答える