2014-06-24 34 views
1

我的一個ViewController我想根據某些時間標準調用方法updateVisitotsLists,並且無法確定哪種方式最適合實現它。iOS設置NSTimer僅在活動/不活動頁面上調用方法

1)每當視圖加載/出現,我想調用這個方法。

對於這個viewDidAppear方法,我可以在調用[super viewDidAppear]之前調用它,所以這個工程,我相信。

2)如果用戶只在這個視圖上,那麼我想每5秒鐘調用一次這個方法。

爲此,我需要設置一個NSTimer。我想在viewDidDisappear時停止這個計時器 - 因爲不希望它運行不必要。我應該如圖所示使用一個UnScheduled Timer嗎?here和開始和停止出現&消失的方法?在viewDidAppear,最初我把這種方法,然後還建立

NSTimer *t = [NSTimer scheduledTimerWithTimeInterval: 5.0 
        target: self 
        selector:@selector(updateVisitotsLists:) 
        userInfo: nil repeats:NO]; 

會是怎樣達到我所期待的最佳途徑和方法?任何幫助,高度讚賞。

謝謝。

更新: -

@Lord Zolt,按你的意見,我做了以下內容: -

//In .h 
@property (strong, nonatomic) NSTimer *timer; 

// .m 
@synthesize timer; 

- (void)viewDidLoad 
{ 
    ........ 

    [super viewDidLoad]; 

    // CREATE TIMER 
    timer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(onTimerCall:) userInfo:nil repeats:YES]; 
} 

-(void) viewWillDisappear:(BOOL)animated { 
    [timer invalidate]; 
    timer = nil; 

    [super viewWillDisappear:animated]; 
} 

-(void) onTimerCall: (NSTimer *) _timer { 
    // UPDATE VISITOR'S LIST 
    [self updateVisitotsLists]; 
} 

這是正確的?

+1

我會推薦使用定時器。 創建一個'NSTimer'屬性,但我建議在viewWillDisappear上調用'invalidate'。如果你不調用無效,當視圖控制器被解除或彈出時,它將不會被釋放,因爲NSTimer會保持它的活性。 –

+0

@LordZsolt,請檢查上面問題中添加的代碼。 – Tvd

+0

@LordZsolt,你可以把你的答案作爲答案,所以我可以標記爲已解決。 – Tvd

回答

2

我會推薦使用計時器。

創建一個NSTimer屬性,但我建議他們在viewWillDisappear上調用invalidate

如果你不調用無效,當視圖控制器被解散或彈出時,它不會被釋放,因爲NSTimer會保持它的活着。

您發佈的代碼是罰款了一些修改:

  • 您不必再@synthesize屬性(除非您覆蓋兩個setter和getter)。
  • 不要將計時器設置爲零。

編輯:如果你希望計時器進行相關的屏幕(又名應該只有當屏幕可見執行),你應該在viewDid(Will)Appear初始化和viewDid(Will)Disappear停止。