2014-01-14 49 views
10

如何使用UIApplicationDidBecomeActiveNotification如何使用UIApplicationDidBecomeActiveNotification

我應該在viewDidLoad還是viewWillAppear聲明它來從後臺到前臺重新加載數據。

UIApplicationDidBecomeActiveNotification只有當應用程序從背景到前景才被調用?

請幫忙。 謝謝。

回答

23

有時候當你需要從後臺就醒在您的視圖控制器一些行動了(如果你輸入的背景屏幕上的這個視圖控制器),它是有UIApplicationDidBecomeActiveNotification的監聽器有用。在這樣醒來viewWillAppear將不會被觸發!使用

例子:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(someMethod)  name:UIApplicationDidBecomeActiveNotification object:nil]; 
} 


- (void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil]; 

}

- (void)someMethod 
{ 
    <YOUR CODE AT WAKE UP FROM BACKGROUND> 
} 

當然,你也可以實現你需要在你的應用程序委託類的生命週期。

+0

感謝您的回答。 – Annu

+0

是的,它適合我。非常感謝。 ü救了我:) – Annu

3

如果您的應用因電話或推送通知而中斷,您會收到此通知。通常,如果您的應用程序在中斷後在屏幕上激活。

您可以註冊任何類,在應用程序將作爲此通知的觀察者處於活動狀態時加載到內存中。

使用下面的代碼在viewDidLoad

[[NSNotificationCenter defaultCenter] addObserver:self 
            selector:@selector(someMethod:) 
             name:UIApplicationDidBecomeActiveNotification object:nil]; 

使用someMethod來處理此通知。而且不要忘了刪除dealloc這個類作爲觀察員:

[[NSNotificationCenter defaultCenter] removeObserver:self 
              name:UIApplicationDidBecomeActiveNotification 
              object:nil]; 
+3

一般情況下,在viewWillAppear中添加一般類型的觀察者(不一定在這種情況下),並在viewWillDisappear中刪除,因爲在很多情況下,當控制器不在時,您不需要監視事件屏幕。有時它會導致錯誤。 – malex

+1

你能告訴一個會導致錯誤的情況嗎? –

+0

提到的錯誤(=隱含問題)出現在我監控的許多項目中。這不是系統問題 - 它是架構問題。通常開發人員(尤其是初級開發人員)瞭解屏幕上的工作週期。但是他們會改變viewWill(Did)消失的東西,並忘記在那之後viewController仍然可以活着(例如在標籤欄中),並且繼續接收現在在場景後面處理的通知。 – malex

1

的OP詢問,當應用程序被轉到後臺發射系統通知,然後再前景化。旨在處理這種情況的通知是UIApplicationDidEnterBackgroundNotification和UIApplicationWillEnterForegroundNotification。如果您想要發佈針對更廣泛情況的通知,例如當您收到系統通知時,請撥打電話,發送短信,或者向上滑動控制面板,以及放棄背景,然後您需要UIApplicationWillResignActiveNotification和UIApplicationDidBecomeActiveNotification。重要的是要認識到這些是不同的,因爲如果您的應用程序是後臺,您可能只需要做出反應,而不是其他情況。