2013-12-18 3 views
5

奇妙な質問です。私は数時間壁に頭を向けていて、解決できませんでした。canDisplayBannerAdsをNOに変更すると、広告バナーを削除するビューが更新されません

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

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

私は、ユーザーがバナーに広告を受け取っている場合は、設定ビューコントローラーに入り、次に購入ビューコントローラーに移動し、購入を成功させ、メインルートビュー、バナー広告見えるままです。ユーザーは完全にアプリを終了した場合relaunches、それが再び表示されません、そして、これは私はviewWillAppearにバナーを表示する方法であるbecuase:

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で呼び出されたとき、または購入したgetを呼び出す専用のメソッドでさえも動作しません。

私は、バナービューがどこかのキャッシュに設定されていると考えていましたが、それだけでは何も出てこないのですが、強制する方法はわかりません。私は、ルートビューコントローラに基本的に無関係にして最初からやり直すようにしてもいいかもしれないと思っていたかもしれませんが、それを強制する方法もわかりません。

誰でも意見はありますか?

+0

私は同様の問題を抱えています。購入(または復元)が行われたビューコントローラで、購入(または購入を復元)した後、広告は引き続き表示されます。ただし、バナー広告なしのサイズ*にビューがリサイズされています。だから、私の場合、スクロールビューは現在かなりスクロールしていません。広告を持つmayアプリの他のビューコントローラでは、購入時に正しく無効になります。また、購入時に広告が表示されていない場合は、問題は発生しません。 –

答えて

6

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

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

私はこれがクリーンソリューションであるとは思わないが、それはfinaly働いているので、私はまでそれを維持します私はより良い解決策を見つける。

+0

このソリューションは私のために働いています。別の方法で描くことはできません。 –

+0

Hmmm。さて、私のアプリにさまざまな変更を加えた後、私はこの回避策が必要ないことを知りました。 self.canDisplayBannerAdsをNOに設定すると、現在表示されているバナー広告が適切な方法で画面からアニメーション表示されます。何が変わったのか分からないのは面倒です。 –

+0

クリスチャン、あなたが岩です。ついに、あなたのソリューションをテストする時間がありました。ありがとう! – KyleAlbert95

0

広告を制御する実装ファイル(.m)にメソッドを作成し、メソッドヘッダーを.h " - (void)viewWillAppear;にも含めます。

- (void)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"); 
} 

購入が確認された後は、

たとえば、他のクラスからメソッドを呼び出します。

AppDelegate *Appdel = [[AppDelegate alloc] init]; 
[Appdel viewWillAppear]; 
+1

こんにちは、ありがとうございますが、わかりません...購入ビューからviewWillAppearメソッドを呼び出すことを提案していますか?しかし、問題はメソッドが呼び出されていないということではありません。元のビューにポップバックすると、viewWillAppearメソッドが呼び出されます。広告バナーが消えないことだけです。私はあなたの提案がどのように違いを生むのかは分かりません。 – KyleAlbert95

関連する問題