Почему я не могу показать свое межстраничное объявление на Facebook после закрытия контроллера представления?

Я работаю с ReplayKit, и когда я нажимаю кнопку отмены или сохранения, он закрывает контроллер представления, и я хотел бы показать рекламу. Проблема в том, что реклама не показывается, и я получаю эту ошибку: Как мне это исправить? Спасибо!

Предупреждение: Исключение возникло во время вызова полученного сообщения, отбрасывания входящего сообщения и аннулирования соединения. Исключение: этот метод должен вызываться в основном потоке.

internal func previewControllerDidFinish(previewController: RPPreviewViewController) {

previewViewController.dismissViewControllerAnimated(true, completion: nil)

NSNotificationCenter.defaultCenter().postNotificationName("loadAd", object: nil)

}

person coding22    schedule 27.07.2016    source источник
comment
Исключение: этот метод должен вызываться в основном потоке. Вы можете отправить функцию с основным потоком, используя GCD. Кстати, пользовательский интерфейс должен обновляться вместе с основным потоком.   -  person Muhammad Zeeshan    schedule 27.07.2016
comment
Для Swift 3 используйте DispatchQueue.main.async { // put your code here }   -  person Tarsem Singh    schedule 26.01.2017


Ответы (1)


Все операции, связанные с пользовательским интерфейсом, должны выполняться в основном потоке. Вы можете сделать что-то подобное, используя GCD:

dispatch_async(dispatch_get_main_queue()) {
        previewViewController.dismissViewControllerAnimated(true, completion: nil)
}

Вы также можете опубликовать уведомление в блоке завершения rejectViewControllerAnimated.

person akdsouza    schedule 27.07.2016
comment
Теперь я получаю эту ошибку: Предупреждение: попытка представить ‹FBInterstitialAdInternal: 0x147a3f690› на ‹RPPreviewViewController: 0x147a429f0›, представление которого не находится в иерархии окон! - person coding22; 27.07.2016
comment
Мне пришлось добавить 2-секундный таймер после того, как я закрыл контроллер просмотра, чтобы показать рекламу, и это сработало. Это не позволило мне вызвать рекламу сразу после того, как я закрыл окно набора повторов по какой-то причине. - person coding22; 27.07.2016
comment
Задержка в 2 секунды на самом деле довольно много, попробуйте что-то меньшее, например 0,2 или 0,5 с, для более плавного взаимодействия. Или то, что работает для вас :) - person akdsouza; 28.07.2016