6
votes

Comment annuler ou arrêter Nsthread?

Je fais une application qui charge le contenu de la vue Concontrolers à l'aide de Nsthread tout en lisant un fichier XML.

Je l'ai fait comme suit: P>

-(void)viewsDidDisappear:(BOOL)animated{
    [NSThread cancel];
    // or [NSThread exit];
    [super viewDidDisappear:YES];
}


1 commentaires

Est-ce que votre - (void) vuesDidDisappear: (bool) méthode d'animation appelée?


4 Réponses :


1
votes

Vous pouvez également utiliser [sortie nsthread]; méthode de nsthread .


3 commentaires

J'ai essayé cela, mais cela ne fonctionne pas pour moi, l'application se bloque = (


Utilisation de [Nsthread EXIT] N'affichez pas de journal de crash, l'application cesse de répondre lorsque le fil se termine. Si je n'utilise pas l'arrêt de thread ou l'annulation des journaux Ceci: Terminez l'application en raison d'une exception non capturée 'NSInvalidargumentException', raison: '- [__ NSCFDICDictionary AddSubview:]: Sélecteur non reconnu envoyé à l'instance ...


Il semble que vous sortiez de Mainthread peut-être. Mais vérifiez l'ajout de sous-visions, peut-être que vous utilisez simplement un mauvais objet?



8
votes

Lorsque vous détachez le nouveau thread, vous ne pouvez plus l'annuler ou la quitter de la vueDidDisappear, etc. Ces méthodes spécifiques à l'UI n'exécutent que sur le thread principal de sorte que la sortie / l'annulation s'applique au fil principal qui est évidemment faux.

Au lieu d'utiliser la nouvelle méthode de thread, déclarez la variable NSThread en .h et initialisez-la en utilisant initwithTarget: sélecteur: objet: méthode et annulez-le à tout moment / où que vous soyez vouloir ..


0 commentaires

0
votes

Il est préférable de laisser un fil de fil gracieusement, c'est-à-dire atteindre sa conclusion naturelle, si vous le pouvez. On dirait dans votre cas que vous pouvez vous permettre. Assurez-vous également que vous mettez à jour l'interface utilisateur du fil principal, pas un thread secondaire, car uikit n'est pas un fil de sécurité.


0 commentaires

0
votes

Vous avez écrit: ... L'application cesse de répondre pendant que le fil se termine ...

Une fois que vous avez signalé un fil d'annulation ou de sortie, vous devez arrêter manuellement tout ce que le fil a été appelé à faire. Un exemple: .... xxx

Dans cet exemple, la boucle est conditionnée sur le thread étant dans un état non annulé.


0 commentaires