2011-08-19 66 views
0

我需要幫助更新applicationDidBecomeActive中的標籤。我的項目結構的方式,我有一個RootViewController。當用戶觸摸按鈕時,通過presentModalView打開新的視圖控制器。每次應用程序變爲活動狀態時,我都想更新此視圖控制器上的標籤。這是我在我的應用程序委託代碼:如何更新applicationDidBecomeActive中的UILabel

WordList1 *viewController1 = [[WordList1 alloc] initWithNibName:@"WordList1" bundle:nil]; 
[viewController1 changelabel:counter]; 
[viewController1 release]; 

而且它在我WordList1視圖 - 控制調用此函數每次更新標籤:當我通過調試器中運行

- (void) changelabel:(int)counter { 
    NSString *string = [NSString stringWithFormat:@"%d", counter]; 
    label.text = string; 
} 

,值「計數器「和」字符串「正在更新,但標籤不會更改值。請幫忙

+0

使用斷點可以檢查標籤變量是否已正確初始化... – Robin

+0

ya標籤已完全初始化,因爲我可以從WordList1本地更新它,而不是通過appdelegate – Ravi

回答

3

你在哪裏創建你的UILabel?如果它是通過您的xib文件創建的,請確保您已將文件所有者的IBOutlet連接到正確的標籤。如果沒有連接,它不知道要更新哪個標籤。

編輯: 我相信從AppDelegate更新您的標籤是錯誤的代碼設計。標籤應該從視圖控制器中真正更新。我的猜測是你將代碼放在AppDelegate中,因爲這是應用程序進入前臺時調用的代碼的位置。要在應用程序進入前景時從視圖控制器更新標籤,可以在視圖控制器中設置通知。代碼例如:

- (id)init 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(changeLabel:) 
               name:UIApplicationWillEnterForegroundNotification 
               object:nil]; 
    return self; 
} 

這注冊爲觀察者每次應用程序將進入前景通知視圖控制器。這樣,您可以在視圖控制器中包含此代碼,並相應地更新它。

此外,請確保您註銷觀察者時視圖控制器被釋放,加入以下到您的dealloc方法:

[[NSNotificationCenter defaultCenter] removeObserver:self]; 
+0

UILabel在IB中創建,通過IBOutlet連接。標籤正在更新,因爲我創建了一個按鈕,它調用WordList1中的「changelabel」函數,而不是appdelegate,並正確更新標籤。但是,標籤沒有從appdelegate更新 – Ravi

+0

在您的代碼中,您創建了'WordList1'視圖控制器的新實例,稱爲'viewController'。但是,當您調用changeLabel方法時,您正在從viewController1調用它。 – superjessi

+0

抱歉,錯字。兩者都應該是相同的。當我創建問題時,我忘記輸入它 – Ravi

0

在你的appdelegate代碼,你永遠不會使用ViewController1。它沒有設置爲rootViewController,也沒有推或者什麼都沒有?我不明白它如何顯示任何東西?

+0

結構化應用程序的方式,用戶將首先去WordList1,然後讓應用程序進入睡眠狀態,當應用程序再次變爲活動狀態時,它應該更新屏幕上的標籤 – Ravi

+0

我的觀點是,重新顯示創建一個新的WordList1,然後銷燬它。它與屏幕上的內容無關。當你啓動並保存它時,你需要創建一個WordList1,在AppDelegate中稱爲實例變量,而不是每次都嘗試創建一個新實例。因此,如果代碼在applicationDidBecomeActive:中,只需(a)將viewController1定義爲一個屬性,將「viewController1」更改爲「viewController1」(b)將alloc/init行移至應用程序:didFinishLaunchingWithOptions:(c)你應該很好。 – mackworth