2016-07-27 4 views
1

Im travailler avec ReplayKit et quand j'appuie sur le bouton d'annulation ou de l'enregistrer congédie le contrôleur de vue et je voudrais montrer une annonce. Le problème est que l'annonce ne s'affiche pas et que j'obtiens cette erreur: comment la corriger? Merci!Pourquoi ne puis-je montrer mon facebook interstitiel après avoir rejeté un contrôleur de vue?

Warning: Exception caught during invocation of received message, dropping incoming message and invalidating the connection. Exception: This method must be called on the main thread

internal func previewControllerDidFinish(previewController: RPPreviewViewController) { 

previewViewController.dismissViewControllerAnimated(true, completion: nil) 

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

} 
+0

Exception: Cette méthode doit être appelée sur le thread principal. Vous pouvez envoyer la fonction avec le thread principal en utilisant GCD. Par ailleurs, l'interface utilisateur doit être mise à jour avec le thread principal. –

+0

Pour Swift 3, utilisez 'DispatchQueue.main.async { // mettez votre code ici }' –

Répondre

3

Toutes les opérations liées à l'interface utilisateur doit être fait sur le thread principal. Vous pourriez faire quelque chose comme ceci en utilisant GCD:

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

Vous pouvez également afficher la notification dans le bloc d'achèvement de dismissViewControllerAnimated

+0

Je reçois cette erreur maintenant: Avertissement: Essayez de présenter sur dont la vue n'est pas dans la hiérarchie de la fenêtre! – coding22

+0

je devais ajouter une minuterie 2 secondes après avoir rejeté la viewcontroller pour montrer l'annonce et cela a fonctionné. Cela ne me permettrait pas d'appeler l'annonce juste après avoir fermé la fenêtre du kit de relecture pour une raison quelconque. – coding22

+0

2 secondes de retard est beaucoup fait, avec quelque chose d'essayer moins comme 0,2 ou 0,5 s pour une expérience plus transparente. Ou tout ce qui fonctionne pour vous :) – akdsouza