奇怪的问题,我几个小时以来一直在这堵墙上绞尽脑汁而且无法解决问题。
我有一个仅使用iOS 7的应用程序使用故事板。在我的主根视图控制器上,我使用self.canDisplayBannerAds = YES在视图底部显示iAd横幅。这非常有效。
我有一个设置视图控制器,从那里,我的用户可以进行应用内购买以永久删除广告。该功能也可以。我在NSUserDefaults standardUserDefaults中存储BOOL值,以跟踪他们是否已购买。
让我感到困惑的是,如果用户在横幅中接收广告,进入设置视图控制器,然后进入我的购买视图控制器,成功购买,然后返回主根视图,横幅广告仍然存在可见。如果用户完全退出应用程序,然后重新启动,则不会再次显示,因为这是我在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并从头开始,那可能会这样做,但我不知道如何强迫它。
有人有任何想法吗?
答案 0 :(得分:6)
我遇到了同样的问题,并找到了适合我的解决方法:
self.canDisplayBannerAds = NO;
for (id aView in self.view.subviews) {
if ([aView isKindOfClass:[ADBannerView class]]) {
[(ADBannerView *)aView setHidden:YES];
}
}
我认为这不是一个干净的解决方案,但由于它最终正常工作,我会保留它直到找到更好的解决方案。
答案 1 :(得分: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];