2016-04-01 72 views
2

我安排了一個本地通知,在用戶輸入特定地理位置6分鐘後關閉,前提是他們仍然在此位置。如何更新/刪除通知中心的通知?

此定像這樣:

UILocalNotification n = new UILocalNotification(); 
n.FireDate = NSDate.FromTimeIntervalSinceNow(360); 
n.AlertAction = "My notification"; 
n.AlertBody = "Notification body";  
UIApplication.SharedApplication.ScheduleLocalNotification(n); 

在一些情況下,某些geolocations重疊,並且用戶將接收一個以上的通知。發生這種情況時,我希望能夠更新通知中心的通知以反映此情況。

我被告知通知中心的直接更新在iOS9中是不可能的,因此要實現我想要的操作,我需要刪除通知並將其替換爲新的。

從幾個小時的谷歌搜索,我發現了以下方法,所有這些都沒有奏效。

UIApplication.SharedApplication.CancelAllLocalNotifications(); 

此功能似乎沒有在當前版本的iOS中執行任何操作。

UIApplication.SharedApplication.ApplicationIconBadgeNumber = 1; 
UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0; 

一些人提到,必須先設置證件號碼,然後將其設置爲零以從通知中心刪除通知。這也沒有效果。

foreach(UILocalNotification n in UIApplication.SharedApplication.ScheduledLocalNotifications) 
{ 
    UIApplication.SharedApplication.CancelLocalNotification(n); 
} 

對於一些發現CancelAllNotifications未奏效的嘗試上述方法。這似乎也沒有效果。如果有幫助,我試圖在通知中心顯示通知的時候記錄一個計數爲ScheduledLocalNotifications,但數組回到空白。

List<UILocalNotifications> notifications = new List<UILocalNotifications>(); 

... 

UIApplication.SharedApplication.ScheduleLocalNotification(n); 
notifications.Add(n); 

... 

foreach(UILocalNotification n in notifications) 
{ 
    UIApplication.SharedApplication.CancelLocalNotification(n); 
} 

另一個用戶建議保留原始通知,然後使用它們在需要時稍後取消它們。再次,我沒有這個運氣。

在Objective-C或Swift中的答案也將非常感謝,我可以理解這些語言。

+0

你想刪除特定的通知或程序的所有其他通知來自通知中心 – Chetan

+0

@Chetan我想刪除來自我的應用的所有其他通知。 – Kizari

+0

您正試圖在後臺或前臺刪除通知 – Chetan

回答

1

下面一些方法來保存和刪除notificaiton
NoticationName只是任何名義,以識別通知要刪除

#pragma mark - Remove Notification 

    - (void) removedStoredLocalNotificationAndCancelNotificationFromPanelOfType: (NSString*) notificationName 
    { 
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

     id storedObject = [defaults objectForKey: notificationName]; 

     if([storedObject isKindOfClass:[NSData class]]) 
     { 
      UILocalNotification* removeNotification = (UILocalNotification*)[NSKeyedUnarchiver unarchiveObjectWithData:(NSData *)[defaults objectForKey:notificationType]]; 

      if(removeNotification) 
      { 
       [[UIApplication sharedApplication]cancelLocalNotification:removeNotification]; 
       [defaults removeObjectForKey: notificationName]; 
      } 
      removeNotification = nil; 
     } 
     else 
     { 
      [defaults removeObjectForKey: notificationName]; 
     } 


     defaults = nil; 

    } 

    #pragma mark -Save notification 
    - (void) saveNewLocalNotificationInUserDefaultsOfType: (NSString*) notificationName withLocalNotification: (UILocalNotification*)localNotification 
    { 

     //************* Check if previous Notification is Present. If YES remove it and show new notification with storing new data in userDefaults**************// 
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
     if(![defaults objectForKey:notificationName]) 
     { 
      NSData *data = [NSKeyedArchiver archivedDataWithRootObject:localNotification]; 
      [defaults setObject:data forKey:notificationName]; 
      [defaults synchronize]; 
     } 
     else if ([defaults objectForKey:notificationName]) 
     { 

      // Remove previous notification 
      //Check if any observation notification is present.If YES remove it from user defaults if stored and cancel local notification 

      [self removedStoredLocalNotificationAndCancelNotificationFromPanelOfType:notificationName]; 

      //Store new notification 

      NSData *data = [NSKeyedArchiver archivedDataWithRootObject:localNotification]; 
      [defaults setObject:data forKey:notificationName]; 
      [defaults synchronize]; 
     } 

    } 
+0

謝謝你。不幸的是,這也沒有從通知中心刪除通知。看起來好像這些通知並沒有首先將它放入'UIApplication.SharedApplication.ScheduledLocalNotifications'數組中,這可能就是爲什麼這些代碼片段都不能將它們移除的原因。我不明白什麼會導致這種情況發生,因爲我通過'UIApplication.SharedApplication調度通知。ScheduleLocalNotification「,這是iOS中的標準程序。 – Kizari

+0

如果可能的話,你可以分享代碼嗎?如果,我可以研究它。 – Chetan