在我的项目中实现它之前,我已经使用计时器创建了一个测试应用程序。
这是我第一次使用计时器。
但是问题是当我使用[NSTimer timerWithTimeInterval: target: selector: userInfo: repeats: ];
实现计时器时,它不起作用。
这是我的代码,
界面:
@interface uialertViewController : UIViewController
{
NSTimer *timer;
}
-(void)displayAlert;
-(void)hideandview;
@end
执行:
@implementation uialertViewController
- (void)viewDidLoad {
[self displayAlert];
[super viewDidLoad];
}
-(void)displayAlert{
timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(hideandview) userInfo:nil repeats:NO];
alert = [[UIAlertView alloc] initWithTitle:@"testing" message:@"hi hi hi" delegate:nil cancelButtonTitle:@"continue" otherButtonTitles:nil];
[alert show];
[alert release];
alert = nil;
}
-(void)hideandview{
NSLog(@"triggered");
[alert dismissWithClickedButtonIndex:0 animated:YES];
[alert release];
[self displayAlert];
}
@end
然后我用
[NSTimer timerWithTimeInterval: target: selector: userInfo: repeats: ];
更改了 [NSTimer scheduledTimerWithTimeInterval: target: selector:userInfo: repeats: ];
,它正在工作。 timerWithTimeInterval:
是什么问题?我在第一个实现中会误会什么吗?提前致谢。 最佳答案
scheduledTimerWithTimeInterval:invocation:repeats:
和scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
创建的计时器会自动添加到NSRunLoop
中,这意味着您不必自己添加计时器。将它们添加到NSRunLoop
中是导致它们触发的原因。
使用timerWithTimeInterval:invocation:repeats:
和timerWithTimeInterval:target:selector:userInfo:repeats:
,您必须使用以下代码手动将计时器添加到运行循环中:
[[NSRunLoop mainRunLoop] addTimer:repeatingTimer forMode:NSDefaultRunLoopMode];
此处的其他答案表明您需要自己调用
fire
。您不需要-计时器进入运行循环后就会立即调用它。