2016-03-15 67 views
2

當我創建我的本地通知回調didReceiveLocalNotification被觸發。當我點擊本地通知時會觸發相同的回調。目前,我將這兩起案件檢查當presentLocalNotificationNow被調用時觸發didReceiveLocalNotification

if ([UIApplication sharedApplication].applicationState == UIApplicationStateInactive) { 
    //this means notification is clicked 
} 

但這裏的主要問題是,當你在前臺你滑動您的通知菜單,然後收到您的本地通知,該回調didReceiveLocalNotification被調用。而在這種情況下,我的應用進入這個如果。因此,我無法真正區分在應用程序處於非活動狀態時單擊通知並創建本地通知。關於如何解決這個問題的任何想法?

這是調度本地通知代碼:

UILocalNotification* localNotification = [[UILocalNotification alloc] init]; 
localNotification.alertBody = @"aaaa"; 
localNotification.alertTitle = @"title"; 
localNotification.userInfo = myUserInfo; 
[[UIApplication sharedApplication] presentLocalNotificationNow:localNotification]; 

調用此之後,我得到didReceiveLocalNotification代表觸發。

回答

2

我不得不在我的應用程序中解決完全相同的問題。我無法在API中找到官方的方式來區分不同,但這是一種解決方法。

傳入userInfo當前日期創建的本地通知時:

localNotification.userInfo = ["alertDate": NSDate()] 

當你處理didReceiveLocalNotification,覈對當前日期再次,以確保它不只是火剛纔:

if application.applicationState == .Inactive { 
    if let alertDate = notification.userInfo?["alertDate"] as? NSDate 
     where (NSDate()).timeIntervalSinceDate(alertDate) > 0.1 { 
     // this means notification was initiated by user 
    } 
} 
+0

真正聰明的主意!幹得好,這完全解決了我的問題!我有我自己的用戶信息數據,但我創建了包含2個字段的JSON:一個包含我的數據,另一個包含當前日期,所以這對我很有用。非常感謝! –

+0

這使我的一天!謝謝 – FonzTech

0
UILocalNotification* localNotification = [[UILocalNotification alloc] init]; 
localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:1]; 
localNotification.alertBody = @"image inserted"; 
localNotification.timeZone = [NSTimeZone defaultTimeZone]; 
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 
[self dismissViewControllerAnimated:YES completion:nil]; 
+0

這與我的問題有什麼關係?顯示如何在當前時間後一秒顯示通知根本沒有用處。我需要一個解決這個問題的辦法:我不能真正區分點擊通知和創建本地通知,而應用程序處於非活動狀態。 –

相關問題