self.presentViewController не очищается, даже когда он отклоняется, что предотвращает показ межстраничной рекламы AdMob - PullRequest
0 голосов
/ 04 августа 2020

Google выдает новое сообщение об ошибке «Предоставленный контроллер представления уже представляет другой контроллер представления», если существует self.presentViewController. Проблема в том, что self.presentViewController, кажется, всегда существует даже после закрытия самого себя!

код:

    print("printing presented view controller1: ")
    print(self.presentedViewController!)
    print("printing picker: ")
    print(picker)
    
    picker.dismiss(animated: true, completion: nil)

    print("printing presented view controller2: ")
    print(self.presentedViewController!)
    sleep(3)
    print("printing presented view controller3: ")
    print(self.presentedViewController!)
    
    // self.presentLoadingIndicator()
    
    if self.interstitial.isReady {
        print("presenting ad.")
        print("printing presented view controller: ")
        print(self.presentedViewController!)
        self.interstitial.present(fromRootViewController: self)
    } else {
      print("Ad wasn't ready")
    }

вывод:

printing presented view controller1: 
<UIImagePickerController: 0x7fe3c00c5c00>
printing picker: 
<UIImagePickerController: 0x7fe3c00c5c00>
printing presented view controller2: 
<UIImagePickerController: 0x7fe3c00c5c00>
printing presented view controller3: 
<UIImagePickerController: 0x7fe3c00c5c00>
presenting ad.
printing presented view controller: 
<UIImagePickerController: 0x7fe3c00c5c00>
2020-08-03 20:38:27.025517-0700 BeerVision[26634:3155513] <Google> The provided view controller is already presenting another view controller.
got into dismiss handler

Как видите, все контроллера печатного представления - это один и тот же объект. Как нам избавиться от self.presentViewController, кроме как уволить? Может, я просто принудительно укажу на ноль или что-то в этом роде?

1 Ответ

0 голосов
/ 04 августа 2020

Хорошо, я наконец понял, что это может быть фактическая ошибка в коде Google, потому что они предполагают, что представление невозможно представить, пока оно представило ViewController, даже если на основе моей отладки он мог иметь представленныйViewController даже после того, как представленный ViewController был уже отклонен (и фактически, даже после того, как я представил новый контроллер представления, каким-то образом представленный ViewController все еще показывает старый). Поэтому я изменил версию своего модуля на более старую версию Google Рекламы. Вот что я сделал:

pod 'Google-Mobile-Ads-SDK', '7.53.1'

Затем мне разрешили установить root контроллер представления как «self», даже если self имеет отклоненный Presentviewcontroller, и реклама отображается идеально, как ожидалось.

Все еще нужно было немного позаботиться о том, чтобы объявление не было преждевременно закрыто (в отличие от Android приложений, iOS межстраничные объявления исчезнут, если вы уберете их родительское представление, что является проблемой c, если вы хотите чтобы отображать рекламу, пока отображается индикатор выполнения загрузки, а индикатор выполнения загрузки в конечном итоге будет закрыт во время показа рекламы. Мне пришлось перепрограммировать код, чтобы избежать отклонения «загрузки» до тех пор, пока реклама не перестанет отображаться)

...