这个奇怪的问题,我已经把头靠在墙上好几个小时了,一直没能解决。
我有一个仅限iOS 7的应用程序,它使用故事板。在我的主根视图控制器上,我使用self.DisplayBannerAds=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");
因此,当他们在购买或恢复后重新启动应用程序时,这种逻辑很好。但是,我希望视图在他们购买后立即更新。然而,我一辈子都不能让那个愚蠢的横幅广告在他们第一次推出时就消失在应用程序中
奇怪的是,如果我创建了一个只设置自拍的按钮。DisplayBannerAds=NO,那么横幅广告就会消失。但当在viewWillAppear、viewDidPear中调用时,它不起作用,甚至在我创建的专用方法中也不起作用。
我在想,也许横幅视图设置在某个缓存中,它不会被拒绝,但我不知道如何强制执行。我也在想,如果我能强制根视图控制器基本上为零,从头开始,也许可以做到,但我也不知道如何强制。
有人有什么想法吗?
我遇到了同样的问题,并找到了一个对我有效的解决方法:
self.canDisplayBannerAds = NO;
for (id aView in self.view.subviews) {
if ([aView isKindOfClass:[ADBannerView class]]) {
[(ADBannerView *)aView setHidden:YES];
}
}
我不认为这是一个干净的解决方案,但由于它最终起作用,我会一直坚持下去,直到找到更好的解决方案。
我会在实现文件(.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];