2011-02-15 14 views
6

Vorrei poter annullare singolarmente i selettori ritardati. Posso farlo con [NSObject cancelPreviousPerformRequestsWithTarget...] ma ho bisogno di tutti i parametri del metodo per farlo. Nel punto in cui voglio annullare, non li ho.È possibile ottenere un elenco di selettori ritardati con performSelector: withObject: afterDelay :?

C'è un modo per ottenere l'elenco dei selettori che sono ritardati insieme ai parametri utilizzati per ritardare i selettori?

La soluzione è semplicemente tenere traccia dei parametri, ovviamente. Oppure per utilizzare GCD e fare in modo che i miei selettori (ora blocchi) controllino se devono tornare immediatamente.

risposta

0

non direttamente. un modo semplice per farlo è usare NSOperation - quindi tieni semplicemente i riferimenti alle operazioni che potresti dover cancellare in futuro.

+0

Hai dimenticato di menton: il codice sta guidando parte dell'interfaccia, quindi devo tenerlo sul thread principale. Ecco perché non ho gettato NSOperation nel mix. –

+0

hmmm ... sembra che dovrai scrivere qualcosa per realizzare questo = \ in aggiunta alle opzioni che hai menzionato nell'OP, potresti registrarti con il ciclo di esecuzione principale (potresti dover andare alle API di CF) e quindi utilizzare NSInvocations per la coda dei messaggi. in alternativa potresti essere in grado di creare un tipo di wrapper per invocazioni di gruppo, quindi utilizzare 'cancelPreviousPerformRequestsWithTarget' senza i parametri sconosciuti. infine, questi messaggi potrebbero invocare tramite un tipo personalizzato che implementa 'isEqual:'. quindi è possibile utilizzare un'implementazione personalizzata di isEqual per identificare quali messaggi annullare. – justin

Problemi correlati