7
votes

Comment arrêter la nsopération actuelle?

J'utilise nsoperationqueur et nsoperation pour exécuter une fonction en arrière-plan clic. Mais je veux être capable, lorsque l'utilisateur clique sur un bouton, arrêtez cette opération.

Comment puis-je le faire?

quelque chose comme, [CURELOPERATION STOP];

Annuler - ne fonctionnera pas. Je veux m'arrêter immédiatement.

merci


0 commentaires

3 Réponses :


16
votes

Vous devez appeler la méthode -cancel et l'opération elle-même doit prendre en charge être annulée en surveillant le iScancéd propriété / clavier et en toute sécurité lorsque sa valeur devient < Code> oui . Si la nsopération est la vôtre, vous devrez probablement créer une sous-classe personnalisée pour mettre en œuvre cette fonctionnalité. Vous ne pouvez pas (en toute sécurité) forcer une opération arbitraire à cesser immédiatement. Il doit supporter d'être annulé.


0 commentaires

1
votes

Vous utilisez Annuler et testez si auto (le nsoperation ) a été annulé pendant l'exécution.


0 commentaires

8
votes

Vous ne pouvez pas arrêter immédiatement en utilisant quoi que ce soit Apple fournit avec Nsoperation . Vous pouvez utiliser - [Annuler] au fur et à mesure que d'autres personnes ont suggéré ici, mais l'opération actuelle fonctionnera toujours jusqu'à l'achèvement. Une façon de se rapprocher d'utiliser - [iScancellé] à l'intérieur de votre opération et saupoudrer que tout au long du code (surtout dans des boucles longues en cours d'exécution). Quelque chose comme: xxx

de cette façon, vous aurez des choses arrêtées relativement bientôt.

Si vous cherchez à forcer vraiment le fil à arrêter, vous devrez peut-être regarder dans la manipulation du signal. Il y a un exemple fileté ici . Envoi d'un signal personnalisé à un fil spécifique, vous pourrez peut-être terminer ce fil d'une manière ou d'une autre. Ce sera beaucoup plus de travail, cependant, et est probablement beaucoup plus de problèmes que ce qu'il vaut.


0 commentaires