ios - 将 canDisplayBannerAds 更改为 NO 不会更新 View 以删除广告横幅

标签 ios cocoa-touch adbannerview candisplaybannerads

奇怪的问题,几个小时以来我一直在用头撞墙,但一直没能解决。

我有一个仅适用于 iOS 7 的应用程序,它使用 Storyboard。在我的主 Root View Controller 上,我使用 self.canDisplayBannerAds = YES 在 View 底部显示 iAd 横幅。这非常有效。

我有一个设置 View Controller ,从那里,我的用户可以进行应用内购买以永久删除广告。该功能也适用。我在 NSUserDefaults standardUserDefaults 中存储了一个 BOOL 值,以跟踪他们是否进行了购买。

让我难过的是,如果用户在横幅广告中收到广告,进入设置 View Controller ,然后到我的购买 View Controller ,购买成功,然后返回主 Root View ,横幅广告仍然存在可见的。如果用户完全退出应用程序,然后重新启动,它不会再次出现,因为这是我在 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");

因此,当他们在购买或恢复购买后重新启动应用时,此逻辑可以正常工作。但是,我希望 View 在他们购买后立即更新。但是,我这辈子都无法让那个愚蠢的横幅广告在应用程序首次启动时消失。

如果我创建一个仅设置 self.canDisplayBannerAds = NO 的按钮,那么这确实会使横幅广告消失,这有什么奇怪的。但是,当在 viewWillAppear、viewDidAppear 中调用时,它不起作用,甚至在我创建的专用方法中调用时,在购买完成后调用。

我在想,也许横幅 View 设置在某处的缓存中,只是没有被清除,但我不知道如何强制执行。我也在想,如果我可以强制 Root View Controller 基本上变为 nil 并从头开始,那可能会做到,但我也不知道如何强制执行。

有人有什么想法吗?

最佳答案

我遇到了同样的问题并找到了适合我的解决方法:

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

我不认为这是一个干净的解决方案,但由于它最终可以工作,我会保留它,直到我找到更好的解决方案。

关于ios - 将 canDisplayBannerAds 更改为 NO 不会更新 View 以删除广告横幅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20666637/

相关文章:

ios - 将文件包放入iOS应用程序中的特定文件夹位置

iphone - UIActivity 指示器用作 Uitableview 页脚时在设备中显示拉伸(stretch)?

iphone - 如何在 Objective-C 中制作一个向上计数的计时器?

ios - 大型 MapKit 矢量叠加 - 建议

objective-c - 如何在 IOS 4.2 中调整 iAds 横幅的大小

ios - SKScene : Move & resize debugging fields

cocoa - Interface Builder 不显示我的一些资源图像

iOS9 self.canDisplayBannerAds = true 不显示任何广告

ios - 单击横幅广告时的 AdMob 事件

ios - 仅 IOS 8 中的核心数据迁移问题,而不是 IOS 9