UIWindow endDisablingInterfaceAutorotationL’erreur d’erreur s’affiche dans la console lorsque le clavier est supprimé de manière interactive de collectionView dans iOS9 uniquement

Je reçois cette erreur étrange dans iOS9 uniquement:

[UIWindow endDisablingInterfaceAutorotationAnimated:] called on UITextEffectsWindow: ...without matching -beginDisablingInterfaceAutorotation. Ignoring. 

à tout moment, je rejette le clavier de manière interactive en le faisant glisser depuis ma collectionView. Je ne reçois pas l’erreur en ignorant le clavier avec un geste ou en appuyant sur Entrée. C’est très frustrant. Même si je n’observe aucune notification au clavier, je reçois toujours cette erreur sur ce renvoi interactif au clavier. Je me demande si quelqu’un d’autre a rencontré cette erreur et a trouvé une solution. J’ai un inputAccessoryView constitué d’un textView monté sur le clavier.

J’ai eu le même problème sur iOS9 mais avec une tableView. Je l’ai implémenté avec self.tableView.keyboardDismissMode = .Interactive et cela a fonctionné pour moi.

 // Dismiss keyboard when scrolling func scrollViewWillBeginDragging(scrollView: UIScrollView) { textView.resignFirstResponder() } 

Choses à vérifier

Il semble que plusieurs autres utilisateurs SO aient eu des expériences similaires dans diverses conditions. Découvrez ce fil Étant donné que beaucoup de choses peuvent se produire à cause de ce problème, vous pouvez consulter le thread fourni pour voir si vous pouvez trouver un cas d’utilisation correspondant. On ne sait pas très bien comment vous écartez le clavier, mais vous pouvez appeler une telle méthode à partir d’une méthode ou d’un outil de reconnaissance de mouvements (plutôt que de rejeter directement un object spécifique):

UIApplication.sharedApplication().sendAction("resignFirstResponder", to: nil, from: nil, forEvent: nil)

Dans la discussion fournie, la nature du problème dans la plupart des cas était un appel en double lors de la présentation ou du rejet de la vue. J’ai aussi vu des problèmes où je me suis connecté à un storyboard (ou dans certains cas il a été supprimé mais le xml était toujours dans le code du storyboard) et une segue basée sur du code (performSegueWithIdentifier …) pour la même animation (qui provoque deux appels d’affichage / de rejet).

Je regarderais le journal pour voir quels appels sont enregistrés juste avant l’erreur et ensuite faire une recherche dans la vue du journal pour voir s’il y a un appel redondant. Là encore, il pourrait y avoir une redondance dans les comportements / animations / mises en page sur le storyboard et les appels effectués dans le code.

METTRE À JOUR

Les commentaires de l’OP m’ont rappelé que dans certains cas, en particulier ceux impliquant des appels lors de présentations / licenciements, j’ai vu des exemples où la seule façon de faire fonctionner une fonction développeur est de l’envelopper dans un appel dispatch_async. Certains appels système critiques semblent ne pas fonctionner correctement si le code du développeur est introduit au cours des mêmes images.

Un exemple concret est cet appel qui se trouve dans willMoveToWindow . Dans ce cas, j’ai une référence faible à la vue et examinez simplement la nouvelle fenêtre pour une valeur nulle (indique que la vue est rejetée) avant d’appeler mon code.

Ainsi, dans cet exemple, si l’on supprime l’appel de répartition, le code du développeur provoquerait le blocage de l’application entière. Je suppose que les appels de transition du système (liés à la transposition vers / depuis la fenêtre) peuvent être en conflit avec les demandes du développeur à ce moment-là.

  dispatch_async(dispatch_get_main_queue(), { () -> Void in //the saved flag is true only when user hits the done button if !(weakSelf!.saved) { weakSelf?.completeNotes(nil) } }) 

J’ai rencontré ce problème et cela perturbe ma vue. C’est comme ça que je le résous.

J’avais un viewController sur textFieldShouldBeginEditing . Dans viewController , un textField été défini pour becomeFirstResponder dans viewDidLoad .

La solution pour moi est de déplacer la becomeFirstResponder sur viewDidAppear .