7
votes

setneedsdisplay ne fonctionne pas dans un bloc

J'utilise cmmotionManager pour récupérer les données d'accéléromètre. La chose est que les données d'accéléromètre sont imprimées périodiquement, les variables d'instance sont modifiées dans la vue, mais la vue ne se redonne pas. J'ai vérifié que hv n'est pas nul et que tout est accroché. Y a-t-il un problème avec appel de SetNeedsDisplay dans un bloc? xxx


0 commentaires

3 Réponses :


4
votes

J'ai fait la même chose dans d'autres blocs et cela fonctionnait, mais pas avec le rappel que vous utilisez ici. Peut-être que le bloc n'est pas exécuté sur le fil principal? Vous pouvez vérifier cela avec: xxx

si ce n'est pas le cas, vous pouvez forcer setnedsdisplay pour exécuter sur le fil principal.


0 commentaires

12
votes

C'est parce que vous appelez une méthode UI sur un fil différent du fil principal.

Ajoutez ceci à votre bloc: xxx

N'oubliez pas que toute méthode traitant de l'utilisateur Les éléments d'interface doivent être appelés à partir du fil principal.


1 commentaires

merci la solution. En étant un outsider, il est vraiment bon d'avoir des gens bien informés ici.



0
votes

Je voulais juste tester la réponse de @ Cocoaho. J'ai essayé d'appeler canetle pour un uibutton dans un fil non principal. Et le titre a changé. J'ai essayé cela ciblant iOS 5.1 et 7.0 à l'aide de Xcode 5.0.1. Aussi, j'ai appelé setingneedsdisplay à partir d'un fil non principal et fonctionnait aussi.

[nsthread ismainthead] était comment je me suis assuré que mes appels n'étaient pas du fil principal. Je ne suis pas sûr que l'appel à fil non principal était la cause de votre problème, mais au moins il y a d'autres possibilités là-bas. Vous pouvez jeter un coup d'œil à Ma réponse pour une autre question.


0 commentaires