2012-04-28 1 views
0

J'ai un bouton d'actualisation dans mon application et la méthode 'doRefresh' qui s'exécute dans un thread d'arrière-plan. Maintenant, si l'utilisateur appuie sur double clic - méthode doRefresh exécuter 2 fois et plus. Je veux que si l'utilisateur appuie sur double clic et plus de clics, tous les threads précédents arrêtent de travailler et terminer. Et la nouvelle méthode commence à s'exécuter dans un nouveau thread. Comment je fais ça?Utilisation d'un seul NSThread pour une méthode

Plus d'informations: Je travaille avec CoreData et analyse un long fichier XML pour les objets de relation de remplissage. Lorsque l'utilisateur appuie sur le bouton de rafraîchissement 10 fois par exemple, salut attraper erreur suivante:

reason: '*** Collection <__NSCFSet: 0x5b7dd50> was mutated while being enumerated.<CFBasicHash 0x5b7dd50 [0x1503400]>{type = mutable set, count = 8 

Répondre

1
Here's how things may work 
1. Keep a reference to last thread spawned 
2. In each thread spawned keep a variable, say var_cancel 
3. When a new thread is created, set the var_cancel to true for previous thread. 
4. In the thread, check for var_cancel at short durations. If found true, exit the thread. 
5. Make sure the thread does not produce any side effects between var_cancel set true to exit of thread. 
+0

Puis-je faire avec du fil de fond (performSelectorToBackground)? –

+0

N'a pas essayé par lui-même, mais cela devrait fonctionner pour avoir annuler la variable dans l'objet passé à la méthode et garder la référence du dernier objet passé. –