NSTimer timerWithTimeInterval:不工作

Mid*_* MP 30 timer nstimer ios

在我的项目中实现它之前,我已经用计时器创建了一个测试应用程序.这是我第一次使用计时器.但问题是当我实现计时器使用时[NSTimer timerWithTimeInterval: target: selector: userInfo: repeats: ];,它无法正常工作.这是我的代码,界面:

@interface uialertViewController : UIViewController
{

    NSTimer *timer;
}

-(void)displayAlert;
-(void)hideandview;
@end
Run Code Online (Sandbox Code Playgroud)

执行:

@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
Run Code Online (Sandbox Code Playgroud)

然后我换 [NSTimer timerWithTimeInterval: target: selector: userInfo: repeats: ]; [NSTimer scheduledTimerWithTimeInterval: target: selector:userInfo: repeats: ]; ,它正在工作.问题是timerWithTimeInterval:什么?我在第一次实施时是否正在处理任何事情?提前致谢.

Jos*_*rey 120

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

使用timerWithTimeInterval:invocation:repeats:timerWithTimeInterval:target:selector:userInfo:repeats:,您必须手动将计时器添加到运行循环中,代码如下:

[[NSRunLoop mainRunLoop] addTimer:repeatingTimer forMode:NSDefaultRunLoopMode];
Run Code Online (Sandbox Code Playgroud)

这里的其他答案表明你需要打电话给fire自己.你不这样做 - 只要计时器被置于运行循环中就会被调用.

  • 即使使用预定的方法,如果在命令行util中运行,你仍然需要手动添加它来执行mainRunLoop,至少在我的经验中,以及表示:[run run run nsrunloop](http:// hackazach达网络/代码/ 2013/08/09 /运行运行运行nsrunloop /) (2认同)