我想使所有[self performSelector:@selector(showLyrics)withObject:nil afterDelay:2];

时间:2012-11-01 09:37:05

标签: iphone objective-c ios

我正在添加

[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 个答案:

答案 0 :(得分:3)

[[NSRunLoop currentRunLoop] cancelPerformSelector:@selector(showLyrics) 
                                           target:self
                                         argument:nil];

答案 1 :(得分:2)

您可以使用NSTimer代替performSelector:withObject:afterDelay:

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

取消:

[timer invalidate];

但您可能希望在每次开始之前使其无效,或者将计时器保留在数组中并迭代它们以取消所有这些。

答案 2 :(得分:0)

使用NSTimer并保存对其的引用,而不是performSelector Afaik performSelector无法取消。 编辑:显然可以取消,请参阅omz的答案......

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

取消您使用的计时器:

[self.showLyricsTimer invalidate];

但是当视图消失时,请注意使计时器无效。在viewWillDisappear回调中,因为NSTimer保留了它的目标。

答案 3 :(得分:0)

  

取消执行先前使用performSelector注册的请求:withObject:afterDelay:

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

这似乎是你在找什么或者你在寻找什么~~