2012-06-24 132 views
2

我試圖阻止一個NSTimer用下面的代碼:NSTimer不停止?

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    timer3 = [NSTimer timerWithTimeInterval:5.0 target:self selector:@selector(start) userInfo:nil repeats:YES]; 
    [[NSRunLoop mainRunLoop] addTimer:timer3 forMode:NSDefaultRunLoopMode]; 
} 

-(void)invalidate 
{ 
    [timer3 invalidate]; 
    timer3 = nil; 
} 

,我叫-(void)invalidate從另一個類是這樣的:

-(void)timer 
{ 
    ClassOfMyTimer *class = [[ClassOfMyTimer alloc] init]; 
    [class invalidate]; 
} 

但計時器不會停止。有誰知道我做錯了什麼?

回答

4

您需要在創建計時器的類的相同實例上調用您的invalidate方法。在你的timer方法中,你創建了一個你的類的新實例,它可以有自己的計時器並使其失效。

1

我對你在這裏試圖做的事情感到困惑,但我猜你沒有保持對timer3的引用。

你有沒有在定時器的.h文件中創建一個屬性:

@property (strong) NSTimer *timer3; 

然後在.m文件添加了合成聲明:

@synthesize timer3; 

然後,在viewDidLoad中:,您可以維持對計時器的引用您是通過創建:

self.timer3 = [[[NSTimer timerWithTimeInterval:5.0 target:self selector:@selector(start) userInfo:nil repeats:YES]; 

[NSRunLoop mainRunLoop] addTimer :self.timer3 forMode:NSDefaultRunLoopMode];

而且,爲了無效後計時器:

[self.timer3 invalidate] 
self.timer3 = nil 

在預覽,斯文也有一個問題,一個有效的解決方案,可能會影響到你..