0

追加しています

[self performSelector:@selector(showLyrics) withObject:nil afterDelay:20];

ただし、ユーザーが曲を再開すると、このセレクターは実行されません。だから、どうすればそれをキャンセルできるのか知りたいだけです。20秒後に呼び出されますが、それは望ましくないので、スケジュールを変更します

 [self performSelector:@selector(showLyrics) withObject:nil afterDelay:20];

私はとても多くの

[self performSelector:@selector(showLyrics) withObject:nil afterDelay:2];

以前に予定していたものをすべてキャンセルしたいです。

4

4 に答える 4

3
[[NSRunLoop currentRunLoop] cancelPerformSelector:@selector(showLyrics) 
                                           target:self
                                         argument:nil];
于 2012-11-01T09:44:47.800 に答える
2

NSTimer代わりに使用できますperformSelector:withObject:afterDelay:

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(showLyrics) userInfo:nil repeats:NO];

キャンセルします:

[timer invalidate];

ただし、毎回開始する前に無効にするか、タイマーを配列に保持し、それらを繰り返し処理してすべてをキャンセルしたい場合があります。

于 2012-11-01T09:41:00.097 に答える
0

以前に performSelector:withObject:afterDelay に登録された実行要求をキャンセルします。

+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(id)anArgument

これはあなたが探しているもの、または探していたもののようです~~

于 2014-06-27T10:14:54.180 に答える
0

の代わりに を使用しNSTimerて参照を保存しますperformSelectorAfaikperformSelectorはキャンセルできません。 編集:どうやらキャンセルできるようです。omzの回答を参照してください...

self.showLyricsTimer = [NSTimer scheduledTimerWithTimeInterval:20.0
                                                        target:self
                                                      selector:@selector(showLyrics)
                                                      userInfo:nil
                                                       repeats:NO];

使用するタイマーをキャンセルするには:

[self.showLyricsTimer invalidate];

viewWillDisappearただし、コールバックでビューが消えたときにタイマーを無効にするように注意してください。これは、NSTimerターゲットが保持されるためです。

于 2012-11-01T09:43:02.217 に答える