Странный вопрос, и я часами бился головой об эту стену и не смог его решить.
У меня есть приложение только для iOS 7, которое использует раскадровки. На моем основном корневом контроллере представления я отображаю баннер iAd в нижней части представления, используя self.canDisplayBannerAds = YES. Это работает отлично.
У меня есть контроллер просмотра настроек, и оттуда мои пользователи могут совершать покупки в приложении, чтобы навсегда удалить рекламу. Этот функционал тоже работает. Я храню значение 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 или даже в созданном мной специальном методе, который вызывается после совершения покупки.
Я думал, что, возможно, вид баннера где-то устанавливается в кеше, и он просто не обнуляется, но я не знаю, как это сделать. Я также подумал, может быть, если бы я мог заставить контроллер корневого представления в основном обнулиться и начать с нуля, это могло бы сделать это, но я тоже не знаю, как это сделать.
У кого-нибудь есть мысли?