5

这是我的确切代码,它似乎不起作用。你能告诉我我做错了什么吗?请注意,refreshTimer 已在私有接口中声明。

-(void)viewDidLoad {
refreshTimer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(timerTest)      userInfo:nil repeats:YES];

}
-(void)timerTest {
NSLog(@"Timer Worked");
}
4

2 回答 2

16

试一试scheduledTimerWithTimeInterval

NSTimer *myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(myMethod) userInfo:nil repeats:YES];

引用:NSTimer timerWithTimeInterval:不工作

scheduledTimerWithTimeInterval:invocation:repeats: 和scheduledTimerWithTimeInterval:target:selector:userInfo:repeats: 创建自动添加到 的计时器NSRunLoop,这意味着您不必自己添加它们。将它们添加到 anNSRunLoop是导致它们触发的原因。

于 2012-08-17T00:18:24.377 回答
7

有两种选择。

如果使用timerWithTimeInterval

使用以下喜欢它。

refreshTimer = [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(timerHandler) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:refreshTimer forMode:NSRunLoopCommonModes];

模式也是两个选项。NSDefaultRunLoopMode对比NSRunLoopCommonModes

更多信息。请参阅此文档:RunLoopManagement


如果使用scheduledTimerWithTimeInterval

使用以下喜欢它。

refreshTimer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(timerHandler) userInfo:nil repeats:YES];

计划的计时器会自动添加到运行循环中。

更多信息。请参阅此文档:Timer Programming Topics

总之

timerWithTimeInterval您必须记住将计时器添加到要添加的运行循环中的“ ”。

" scheduledTimerWithTimeInterval" 默认自动创建一个在当前循环中运行的计时器。

于 2012-08-17T00:41:28.993 回答