2015-04-17 3 views
0

У меня есть 5-tab UITabBarController, где каждая вкладка является UIViewController. Первая вкладка называется Timeline, вторая называется Person, а последняя вкладка называется More.Удаление AdBannerView из UIViewController из IAP без необходимости перезапуска приложения

Я реализовал In-App Purchase с с моим приложением, где перед IAP, пользователь может не изменять темы, например, и т.д. Одна из вещей, которые я подвожу к этой версии извлекая iAds с IAP.

Так Timeline имеет AdBannerView на дне до IAP было сделано, и как только IAP было закуплено на вкладке More, я ожидал AdBannerView быть удалены из Timeline сразу.

Выпуск

Что на самом деле происходит сейчас, я иду на вкладку More, купить IAP и вернуться к Timeline и AdBannerView все еще там. Если я перейду с вкладки Timeline на вкладку Person и обратно на вкладку Timeline, удаляется AdBannerView. Или, если я повторно запустил приложение после IAP, AdBannerView удаляется из Timeline. В любом случае, это не делает то, что я ожидаю, а именно для удаления AdBannerView при первом обращении к вкладке Timeline с вкладки More после IAP.

Вот код:

- (void)displayiAdsOrNot 
{ 
    NSLog(@"Display iAds or Not"); 
    if (![[NSUserDefaults standardUserDefaults] boolForKey:@"IAPSuccessful"]) 
    { 
     NSLog(@"BASIC"); 

     self.adBanner = [[self appdelegate] adBanners]; 
     self.adBanner.delegate = self; 

     if (IDIOM == IPAD) 
     { 
      NSLog(@"*** This is the iPad ***"); 
      [self.adBanner setFrame:CGRectMake(0, [[UIScreen mainScreen] bounds].size.height-80, 320, 50)]; 
      [self.adBanner setTranslatesAutoresizingMaskIntoConstraints:NO]; 

      [self.view addSubview:self.adBanner]; 
      NSLayoutConstraint *myConstraint =[NSLayoutConstraint 
               constraintWithItem:self.adBanner 
               attribute:NSLayoutAttributeLeading 
               relatedBy:NSLayoutRelationEqual 
               toItem:self.view 
               attribute:NSLayoutAttributeLeading 
               multiplier:1.0 
               constant:0]; 

      [self.view addConstraint:myConstraint]; 



      myConstraint =[NSLayoutConstraint constraintWithItem:self.adBanner 
                 attribute:NSLayoutAttributeTrailing 
                 relatedBy:NSLayoutRelationEqual 
                  toItem:self.view 
                 attribute:NSLayoutAttributeTrailing 
                 multiplier:1 
                 constant:0]; 

      [self.view addConstraint:myConstraint]; 

      myConstraint =[NSLayoutConstraint constraintWithItem:self.adBanner 
                 attribute:NSLayoutAttributeBottom 
                 relatedBy:NSLayoutRelationEqual 
                  toItem:self.view 
                 attribute:NSLayoutAttributeBottom 
                 multiplier:1 
                 constant:0]; 

      [self.view addConstraint:myConstraint]; 

     } 
     else 
     { 
      NSLog(@"*** THIS IS THE IPHONE ***"); 
      [self.adBanner setFrame:CGRectMake(0, [[UIScreen mainScreen] bounds].size.height-98, 320, 50)]; 
      [self.view addSubview:self.adBanner]; 
     } 

    } 
    else 
    { 
     NSLog(@"PRO"); 
     [self.adBanner removeFromSuperview]; 
     self.adBanner = nil; 
    } 
} 

Этот метод вызывается только из viewWillAppear.

С помощью руководства NSLogs на вкладке Timeline на консоли отображаются BASIC. Когда я иду на вкладку More, купить IAP и обратно на вкладку Timeline, то viewWillAppear пожары снова который выстреливает метод displayiAdsOrNot и на этот раз, я получаю NSLogPRO потому что NSUserDefaultIAPSuccessful теперь является истинным (что делается при покупка проходит).

Однако на данный момент AdBannerView по-прежнему отображается.

То, что я пытался

Я пытался несколько вещей, чтобы попытаться получить эту работу:

  • Создать NSNotification когда покупка проходит с слушателя в viewWillAppear метод Timeline вкладка. В этом методе установите self.adBanner на nil, удалите его из надзора и т. Д. Селектор запускается с Notification (до viewWillAppear), но ничего не происходит.
  • Я попытался self.adBanner.delegate = self; self.adBanner = nil; [self.adBanner removeFromSuperview]; и т.д., и это тот же самый
  • Я попытался [self.timelineTableView reloadData];
  • Вслед за этим аналогичный вопрос SO (Reloading an SKScene or View to remove iAd after In App Purchase), я даже попытался установить Ивар никакого эффекта.
  • Я пробовал разместить self.adBanner на экране, но то же самое происходит; когда загружается временная шкала, AdBannerView все еще там, пока я не уеду в другое место.

У меня есть viewWillDisappear следующим образом:

- (void)viewWillDisappear:(BOOL)animated 
{ 
    self.adBanner.delegate = nil; 
    self.adBanner=nil; 
    [self.adBanner removeFromSuperview]; 
} 

Это делается с целью использования Shared AdBannerViews. self.adBanner - это свойство, созданное в файле .h, и я использую @synthesize adBanner = _adBanner в файле .m.

Любые рекомендации по этому вопросу действительно будут оценены.

ответ

0

Я исправил эту проблему.

Удаляя viewWillDisappear и установка self.adBanner.hidden= YES если в IAPSuccessful и в Notification, я сумел избавиться от AdBannerView без перезапуска приложения.