这是我的代码。我预计计时器会在启动后5秒内停止,但事实并非如此。这有什么不对?
-(void)loadView
{
NSTimeInterval startTime = [NSDate timeIntervalSinceReferenceDate];
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.0
target:self
selector:@selector(targetMethod:)
userInfo:nil
repeats:YES];
if([NSDate timeIntervalSinceReferenceDate] - startTime >= 5) {
[timer invalidate];
}
}
-(void)targetMethod:(NSTimer *)timer {
NSLog(@"bla");
}
答案 0 :(得分:2)
NSDate的timeIntervalSinceReferenceDate默认情况下返回2001年1月1日。减去相同的值将始终为0.
这是一个想法: 在你的.h
@interface MyClass : NSObject
@property (nonatomic, retain) NSTimer *timer;
- (void)targetMethod:(NSTimer *)timer;
- (void)cancelTimer;
@end
在你的.m
@implementation MyClass
@synthesize timer;
-(void)loadView
{
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.0
target:self
selector:@selector(targetMethod:)
userInfo:nil
repeats:YES];
[self performSelector:@selector(cancelTimer) withObject:nil afterDelay:5.0];
}
-(void)cancelTimer {
[self.timer invalidate];
}
-(void)targetMethod:(NSTimer *)timer {
NSLog(@"bla");
}
答案 1 :(得分:1)
这很简单:
NSDate *endtime = [NSDate dateWithTimeIntervalSinceNow:5];
[NSTimer scheduledTimerWithTimeInterval:1
target:self
selector:@selector(timerTick:)
userInfo:endtime
repeats:YES];
-(void)timerTick:(NSTimer*)timer
{
NSLog(@"timer tick");
if ( [timer.userInfo timeIntervalSinceNow] < 0 )
{
[timer invalidate];
NSLog(@"invalidating timer");
}
}
答案 2 :(得分:0)
你的时差总是0,所以你永远不会让它失效!
在设置计时器之前尝试设置startTime。
答案 3 :(得分:0)
您获得'startTime'值,并且您比较它的值是相同的。您的计算将始终为0.您必须在loadView方法中存储'startTime',然后在计算中使用它。