iOS 12 присутствует (fromrootviewcontroller) вызывает зависание приложения - PullRequest
0 голосов
/ 08 мая 2020

Очень запутался в проблеме, с которой я только что наткнулся. У меня быстрая игра, в основном использующая SpriteKit. В конце игры загружается реклама. Или, когда пользователь решает завершить игру, также загружается реклама.

Если игра ведется нормально. Последовательность действий следующая ...

MenuScene -> GameScene -> [загрузка рекламы] -> GameOverScene

Если пользователь выходит из игры ...

MenuScene - > GameScene -> пользователь выбирает паузу -> пользователь нажимает кнопку выхода -> [загрузка рекламы] -> Сцена меню

Оба сценария ios отлично работают для iOS 13

Однако в iOS 12, работает только пользователь, выходящий из игры, в другом сценарии приложение зависает (для меня нет очевидных ошибок в журнале)

Завершение игры любым из методов вызывает ту же самую функцию. Использует уведомление для загрузки рекламы.

Весь следующий код находится в GameViewController. И уведомление размещается в GameScene.

NotificationCenter.default.addObserver(self, selector: #selector(GameViewController.showAd), name: NSNotification.Name(rawValue: "loadAndShow"), object: nil)

Объявление готовится в ViewDidLoad ()

myAd = createAd()

И функция вызывается уведомлением

@objc func showAd() {
    if (myAd.isReady) {
        myAd.present(fromRootViewController: self)
        myAd = createAd()
    }
}

func createAd() -> GADInterstitial {

    myAd = GADInterstitial(adUnitID: "MY ADMOB ID")
    let request = GADRequest()
    GADMobileAds.sharedInstance().requestConfiguration.testDeviceIdentifiers = ["MY DEVICE ID"]
    myAd.delegate = self
    myAd.load(request)
    return myAd

}

Любая помощь была бы потрясающей

ОБНОВЛЕНИЕ

Нашли потенциальное решение. Сейчас я показываю рекламу в другом потоке и больше не испытываю зависаний.

        DispatchQueue.main.async {
            self.myAd.present(fromRootViewController: self)
        }

Могу только предположить, что iOS13 лучше справляется с этим. И причина, по которой сценарий «выхода из игры» сработал, заключалась в том, что он переходил к сцене меню, которая также является GameViewController. Приложению не нравилось показывать рекламу из GameViewController при переходе к новой сцене.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...