在我的项目中实现它之前,我已经使用计时器创建了一个测试应用程序。
这是我第一次使用计时器。
但是问题是当我使用[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。您不需要-计时器进入运行循环后就会立即调用它。

10-07 20:28