2011-11-04 40 views
0

在我viewDidLoad方法我有以下幾點:在同一UIViewControllers使用2的NSTimer

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self repeatRequest]; 
    [NSTimer scheduledTimerWithTimeInterval:30.0 target: self selector: @selector(repeatRequest) userInfo: nil repeats: YES]; 
    [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(onTimer) userInfo:nil repeats:YES]; 
} 

這裏是被調用的方法:

- (void) repeatRequest{ 
    NSLog(@"backgroundRequest"); 
    } 

- (void) onTimer{ 
    NSLog(@"flip pages"); 
} 

的東西是一切正常的一個2分鐘,方法被調用設置...但之後,一切都會誤入歧途,並且方法每秒調用一次而不是五秒鐘一次。並且repeatrequest被更頻繁地調用它應該是。任何人都知道它是什麼h可能是原因?

+0

我覺得在這個視圖的另一個代碼的問題,因爲我檢查它1小時它對我工作很好。 – Ron

回答

0

你真的沒有給我們太多的信息一起工作,但我猜想,無論出於何種原因您viewDidLoad方法被調用多次,導致其一直在打你的repeatRequestonTimer方法很多重複計時器。

你可能想看看爲什麼viewDidLoad可能被多次調用。也看看here。你應該假設允許viewDidLoad被多次調用。

(要進行檢查,只需添加NSLog(@"viewdidload");到您的viewDidLoad方法,看如何往往是被調用。)

什麼,你真正應該做的,因此,存儲您NSTimer實例作爲高德(假設他們被稱爲timer1timer2分別),然後檢查他們是否已經存在時viewDidLoad叫做:

if (!timer1) timer1 = [NSTimer scheduledTimerWithTimeInterval:30.0 target: self selector: @selector(repeatRequest) userInfo: nil repeats: YES]; 
if (!timer2) timer2 [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(onTimer) userInfo:nil repeats:YES]; 
0

這聽起來像你可能會創建這些計時器的多個實例,也許是因爲你的觀點是交流多次加載。當創建定時器來驗證時,您可能會輸出日誌或斷點。

您應該保留在viewDidLoad中創建的定時器的引用,以便您可以在viewDidUnload中適當地使其失效。

+0

如何使它們無效?一段代碼請 – adrian

+0

[timer invalidate]; (你需要在伊娃或財產中保留對定時器的引用) –

相關問題