iOS9 – Cette application modifie le moteur de layout automatique à partir d'un fil de fond – où?

Pour la search, le message d'erreur est:

Cette application modifie le moteur autolayout à partir d'un thread d'arrière-plan, ce qui peut entraîner une corruption du moteur et des pannes étranges. Cela entraînera une exception dans une version ultérieure.

Je sais que cela signifie que du code UIKit est appelé à partir d'un fil de fond, et je sais que la solution consiste à envelopper le code

dispatch_async(dispatch_get_main_queue(), ^(void){ <code> });

Mon problème est de localiser où faire cela, car aucune trace de stack imprimée ne fait reference à mon code d'application. Ma preuve pour prouver ce négatif est la search (command-f) dans la window de sortie de debugging pour le nom de mon application; J'ai 24 traces de stack jetées et mon nom d'application ne figure dans aucun d'entre eux, sauf en haut avec le message d'erreur. Je peux en postr un, mais cela ne me semble pas très utile.

Dans les cas sur viewWillDisappear() je travaille aujourd'hui, cela se produit lors de la transition des controllers de vue, après viewWillDisappear() et avant viewWillAppear() . J'ai trouvé des parties de mon code pour entourer dispatch_async() , mais toutes sont maintenant gérées. J'ai des points d'arrêt et des messages de debugging où les objects pertinents pour les controllers de vue sont alloués et désalloués, et ils se triggersnt tous après l'apparition des messages d'exception. Cela se passe à la fois sur le simulateur et sur mon iPhone iOS9, à la fois en mode debug et release.

Comment puis-je identifier le code d'arrière-plan qui semble modifier l'interface user?

Ce code PSPDFUIKitMainThreadGuard provoque des assertions sur l'access UIKit en dehors du thread principal

Étapes à utiliser:

  1. Ajouter pour projeter et comstackr ce file sans ARC
  2. Déplacer la définition PSPDFAssert vers le premier file
  3. Commenter l'appel de PSPDFLogError car il n'est pas défini
  4. importer <UIKit/UIKit.h>

Votre application se bloque et s'arrête lorsque vous tentez de modifier un élément de l'interface user à partir du fil d'arrière-plan

Pour swift, utilisez le code suivant: NBUIKitMainThreadGuard

 NSOperationQueue.mainQueue().addOperationWithBlock(){ [YOUR CODE] }