2011-02-15 11 views
6

遅延セレクタを個別にキャンセルしたいと考えています。私は[NSObject cancelPreviousPerformRequestsWithTarget...]で彼をすることができますが、これを行うにはすべてのメソッドパラメータが必要です。私がキャンセルしたいと思うところで、私はそれらを持っていません。performSelector:withObject:afterDelay :?で遅延したセレクタのリストを取得できますか?

セレクタの遅延に使用するパラメータとともに遅延するセレクタのリストを取得する方法はありますか?

回避策は、もちろんパラメータを追跡することです。または、GCDを使用して、セレクタ(今ブロック)を作成してすぐに戻す必要があるかどうかを確認してください。

答えて

0

これを達成する簡単な方法は、NSOperationを使用することです - その後、取り消す必要のある操作への参照を保持するだけです。

+0

メントンを忘れてしまった:コードがインターフェイスの一部を動かすため、メインスレッドにコードを残す必要があります。だから私はNSOperationをミックスに投げ込まなかったのです。 –

+0

hmmm ...あなたがOPで言及したオプションに加えてこれを達成するために何かを書く必要があるようですが、あなたはメインのループに登録することができます(あなたはCF API )、メッセージキューにNSInvocationsを使用します。代わりに、呼び出しをグループ化するためのラッパー型を作成し、未知のパラメータなしで 'cancelPreviousPerformRequestsWithTarget'を使用することができます。最後に、これらのメッセージは 'isEqual:'を実装するカスタム型を介して呼び出すことができます。 isEqualのカスタマイズされた実装を使用して、取り消すメッセージを識別することができます。 – justin

関連する問題