延迟后执行选择器只调用一次

时间:2013-04-22 08:15:52

标签: ios objective-c xcode viewdidload performselector

我有一个应用程序,我需要在每1或2秒后调用一个实例方法。现在,如果我放置

[self performSelector:@selector(getMatchListWS) withObject:nil afterDelay:1.0];

在viewDidLoad:或viewWillAppear:中,方法getMatchListWS仅在视图出现或加载时被调用一次。但是我需要连续调用该方法,即使用户在该视图上而视图没有消失或卸载。那么,我可以添加performSelector方法的正确位置或委托方法是什么,以便每秒调用它而不必一次又一次地卸载视图。我是否需要在后台或主线程中执行某些操作。在此先感谢!!

3 个答案:

答案 0 :(得分:11)

就像这样:

[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(getMatchListWS:) userInfo:nil repeats:YES];

将它放在viewDidLoad中,这样您就不会遇到多个被触发事件的问题。如果您将其放在viewWillAppearviewDidAppear上,并且您正在推送或显示modalViewController,则会发生这种情况。

答案 1 :(得分:7)

Jacky Boy的回答将完成你的工作。另一种解决方案(如果您热衷于使用performSelector方法)将在方法定义中添加相同的行,如此

-(void) getMatchListWS {
//Get Match List here

[self performSelector:@selector(getMatchListWS) withObject:nil afterDelay:1.0];
}

注意:您应该在加载视图时调用该方法一次。

答案 2 :(得分:1)

您只是在延迟通话。那会做的是在延迟1秒后调用你的方法。您需要做的是将计时器设置为在特定时间间隔后重复调用您的方法。

//create an instance of NSTimer class
NSTimer *timer;

//set the timer to perform selector (getMatchListWS:) repeatedly
timer= [NSTimer timerWithTimeInterval:1.0
                                        target:self
                                        selector:@selector(getMatchListWS:)
                                        userInfo:nil
                                        repeats:YES];