2013-04-22 15 views
0

我正在研究一個在- (void)applicationWillEnterForeground:(UIApplication *)application中執行任務「A」的應用程序。ios確定是否由於PushNotification操作而調用方法「applicationWillEnterForeground」的正確方法

該應用程序還爲遠程通知註冊。在- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo該應用需要執行一個任務「B」。

當應用程序爲後臺並收到通知時,任務執行順序爲「A」,後跟「B」。

如果收到通知並且應用程序在後臺,我需要做的是僅執行「B」任務。

如何才能做到這一點?

感謝

+0

什麼樣的任務是「B」?在應用程序處於後臺時,只有某些事情可以完成,它們非常受限制 - 使用導航,播放音頻,下載報亭內容 - 就是這樣。 – 2013-04-22 14:27:00

+0

@Reid Belton - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo沒有限制 – user1078065 2013-04-22 14:49:23

+0

這取決於「B任務」是什麼。 – 2013-04-22 18:58:24

回答

0

它已經一個月以來你張貼了這個問題,所以我不知道你是否還需要一個答案,但我通過推動所有共享「高考邏輯」(我喜歡叫解決了這個問題它)到applicationDidBecomeActive:,並簡單地將入口方法作爲狀態存儲在appdelegate對象中。所以如果我從後臺進入應用程序,那麼我設置了一個標誌。如果我通過通知進入,我會存儲通知消息(這樣我可以智能地處理通知入口邏輯)。如果我通過網址進入,那麼我存儲該網址。在applicationDidBecomeActive:我期待看看我來自哪個方向。下面是我看的狀態:

  1. 新的應用程序實例通過點擊應用程序圖標(無狀態設置)
  2. 從後臺通過點擊應用程序圖標或結束電話,等進來了(只有進入前景標誌集,沒有別的)
  3. 從APNS進來(通知數據設置,請注意,這可能是新的應用程序實例或從後臺)
  4. 來自url(url設置,注意這可能是新的應用實例或來自後臺)

將所有必要的信息都集中在一個地方,我可以智能地決定是要執行通知入口邏輯,還是簡單地輸入前臺入口邏輯。

順便說一句,這個流程圖非常寶貴! http://www.cocoanetics.com/2010/07/understanding-ios-4-backgrounding-and-delegate-messaging/

+0

是的,我也發現這個解決方案的工作。 – user1078065 2013-06-06 10:39:30