2011-06-22 87 views
0

我正在使用名爲RootViewController的主控制器和名爲DetailViewController的詳細控制器的SplitViewController。在我的RootViewController的,我有接口內部的定時器:NSTimer無法與另一個View Controller的標籤進行交互?

@interface RootViewController : UITableViewController <UISplitViewControllerDelegate> { 
    UISplitViewController *splitViewController;  
    UIPopoverController *popoverController; 
    UIBarButtonItem *rootPopoverButtonItem; 

    NSTimer *counter; 
} 

當用戶選擇從RootViewController的表中的行中,計數器被設置,例如:

counter = [NSTimer scheduledTimerWithTimeInterval:(1.0/1.0) target:self selector:@selector(countdown) userInfo:nil repeats:YES]; 

倒計時方法是因此被稱爲:

-(void)countdown { 
    DetailViewController *newDetailViewController = [[DetailViewController alloc]init]; 
    newDetailViewController.countdown_timer.text = @"Text Switched"; 
} 

方法中的代碼工作正常,幾乎其他任何地方,標籤似乎永遠不會不管改變什麼代碼放置在倒計時甲基OD。是什麼導致這不會連接到我的DetailViewController的標籤?

謝謝!

回答

0

問題是,您每次觸發定時器時都會創建一個DetailViewController的新實例。這是一個內存泄漏。其次,它不會改變DetailViewController的可見實例。要更改可見實例,您必須將其存儲在屬性或實例變量中。

雖然我不能完全肯定這會工作,你可以嘗試定義您的countdown方法就是這樣,

-(void)countdown { 
    DetailViewController *detailViewController = [splitViewController.viewControllers objectAtIndex:1]; 
    detailViewController.countdown_timer.text = @"Text Switched"; 
} 

這是未經檢驗的,應在理論工作。如果這可行,則不需要額外的實例變量。

+0

啊!我明白你在說什麼。謝謝您的幫助! – drfranks3

相關問題