118 votes

annulation en file d’attente des appels performSelector:afterDelay

quelqu'un sait si il est possible d'annuler déjà en file d'attente sélecteur d'évènements à partir de la pile d'événements ou de la minuterie de la pile (ou quel que soit le mécanisme qui est utilisé par l'API) lorsque vous appelez performSelector:withObject:afterDelay?

J'ai été en utilisant cette pile d'événements pour modifier les attributs d'une image au sein d'un TabBar onglet, et parfois de la file d'attente jusqu'à 10 secondes de changements dans un exécutées rapidement par boucle... peut-être 5 millisecondes.

le problème se pose si l'utilisateur passe d'onglets... comme dire que j'ai l'image des altérations de la file d'attente pour une image qui s'affiche dès que l'Onglet n ° 4 est activé, puis l'utilisateur passe rapidement à l'Onglet n ° 3, puis à droite pour revenir à l'Onglet n ° 4... ce serait alors re-file d'attente de 10 secondes de modifications, alors que l'ancienne file d'attente était toujours en cours de lecture, probablement autour de 2 ou 3 secondes dans la file d'attente si commuté assez rapide... mais même en arrivant à 5 secondes dans le courant était un problème.

j'ai donc besoin d'un moyen pour annuler la vieille pile de modifications avant de mettre une nouvelle pile sur...

Je suis en train d'écrire cette requête dans le passé parce que j'ai déjà venu avec une solution alternative à ce problème en ajoutant un faucon aux yeux du filtre d'événement sur la fonction de lecture. cependant, je suis toujours curieux de savoir si l'annulation d'un événement est possible, car j'ai le sentiment que ces connaissances vous seront utiles dans l'avenir. je vous remercie pour toute l'aide :)

245voto

stefanB Points 27796
[NSObject cancelPreviousPerformRequestsWithTarget:]

ou

[NSObject cancelPreviousPerformRequestsWithTarget:selector:object:]

L' target est à l'origine de l'objet sur lequel performSelector:afterDelay: a été appelé.

Par exemple:

// schedule the selector
[self performSelector:@selector(mySel:) withObject:nil afterDelay:5.0];
// cancel the above call (and any others on self)
[NSObject cancelPreviousPerformRequestsWithTarget:self];

Voir apple docs, c'est à droite à la fin de l' performSelector:withObject:afterDelay: description.

2voto

Irene Points 51

Si vous cherchez « performSelector » d’avoir son correspondant « cancelPreviousPerformSelector »... ce n’est pas. (Pouah, Apple, pourquoi tu fais que pour moi ???)

La, euh, ah, méthodes de « correspondance » sont : performSelector cancelPreviousPerformRequestsWithTarget

(Juste pour le rendre plus dur à retenir, sans rechercher les docs.)

2voto

Marco Mirisola Points 11

Utilisation pour annuler toutes les prévisualisations

1voto

NSResponder Points 14459

Vérifiez la documentation de NSRunLoop. Vous voulez - cancelPerformSelectorsWithTarget :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X