2015-04-07 92 views
1

據我所知,didReceiveLocalNotification會被解僱兩次。首先它會在本地通知被觸發時觸發,然後在用戶選擇它時觸發。didReceiveLocalNotification被解僱了兩次

有什麼辦法可以知道用戶選擇觸發了didReceiveLocalNotification嗎?

當通知觸發時(同時保持應用程序打開),如果我保持抽屜打開,應用程序會自動導航到屏幕。我不希望它發生。只有當用戶進行選擇時,它才能導航到特定的屏幕。

在此先感謝。

回答

0

當通過通知啓動應用程序時,應用程序委託啓動選項應該包含密鑰UIApplicationLaunchOptionsLocalNotificationKey,它向您提供與通知關聯的UILocalNotification。

如果應用程序是開放的,你的目標是iOS 8的那麼一個新的處理程序添加

// Called when your app has been activated by the user selecting an action from a local notification. 
// A nil action identifier indicates the default action. 
// You should call the completion handler as soon as you've finished handling the action. 
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification completionHandler:(void(^)())completionHandler NS_AVAILABLE_IOS(8_0); 

也嘗試檢查LocalNotification是導致應用程序推出接着

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 

當你設置本地通知您可以獲取用戶字典,您可以在其中設置唯一ID以跟蹤

notification.userInfo = [NSDictionary dictionaryWithObject:unique_id forKey:@"uniqueId"]; 
+0

但我的問題是,當應用程序被打開,我拉下通知屏幕的抽屜。那麼有沒有辦法知道?在那種情況下'didfinishlaunchingwithoptions'方法不會被調用嗎? –

+0

是的,爲了處理2種方式,我更新了我的答案。 – Retro

1

當應用程序處於狀態不活動(與OS通知拉下來),didReceiveLocalNotification似乎被調用兩次。 1.當通知到達 2.如果用戶點擊通知

你可以做的是抓非活動狀態在步驟1,不執行你的縮進動作。

或者你也可以做相反的是,從通知中心移除通知,以便爲用戶不能點擊它(步驟2)

if (UIApplication.sharedApplication().applicationState == .Inactive) { 
    application.cancelLocalNotification(notification) 
}