2013-07-08 4 views
24

Мое приложение позволяет пользователям устанавливать количество напоминаний в будущем. Когда приложение lauches я хочу знать, какие напоминания (уведомления) уже установлены.Найти местное уведомление, приложение уже установлено

Могу ли я прочитать уведомления, которые я установил или мне нужно сохранить в своем приложении (например, Core Data или Plist)?

+0

Есть ли способ найти предстоящие уведомления? (включите тот, у которого есть интервал повторения) –

ответ

39

UIApplication имеет свойство scheduledLocalNotifications которое вы можете использовать.

+0

Эй, Скотт Берревоэс, Пожалуйста, помогите мне. Я не получаю свою тревогу со второго раза, но уже находится в списке ожидающих тревог. https://stackoverflow.com/questions/44132879/ios-local-notification-not-firing-second-time-but-shows-in-getpendingnotificatio –

21

Скотт прав.

UIApplication свойству объекта scheduledLocalNotifications

Вот код:

NSMutableArray *notifications = [[NSMutableArray alloc] init]; 
[notifications addObject:notification]; 
app.scheduledLocalNotifications = notifications; 
//Equivalent: [app setScheduledLocalNotifications:notifications]; 

UIApplication *app = [UIApplication sharedApplication]; 
NSArray *eventArray = [app scheduledLocalNotifications]; 
for (int i=0; i<[eventArray count]; i++) 
{ 
    UILocalNotification* oneEvent = [eventArray objectAtIndex:i]; 
    NSDictionary *userInfoCurrent = oneEvent.userInfo; 
    NSString *uid=[NSString stringWithFormat:@"%@",[userInfoCurrent valueForKey:@"uid"]]; 
    if ([uid isEqualToString:uidtodelete]) 
    { 
     //Cancelling local notification 
     [app cancelLocalNotification:oneEvent]; 
     break; 
    } 
} 

NSArray *arrayOfLocalNotifications = [[UIApplication sharedApplication] scheduledLocalNotifications] ; 

for (UILocalNotification *localNotification in arrayOfLocalNotifications) { 

    if ([localNotification.alertBody isEqualToString:savedTitle]) { 
     NSLog(@"the notification this is canceld is %@", localNotification.alertBody); 

     [[UIApplication sharedApplication] cancelLocalNotification:localNotification] ; // delete the notification from the system 

    } 

} 

Для получения дополнительной информации ознакомьтесь с этим: scheduledLocalNotifications example UIApplication ios

+0

Спасибо, также помогите с моим следующим вопросом относительно хранения идентификатора для каждого уведомления - все сделано сейчас ... –

+1

Это странный пример кода. ОП запрашивает список местных уведомлений, и вы показываете пример того, как отменить локальные уведомления – Houman

5

@Scott Berrevoets дал правильный ответ. Для того, чтобы на самом деле перечислять их, просто перечислить объекты в массиве:

[[[UIApplication sharedApplication] scheduledLocalNotifications] enumerateObjectsUsingBlock:^(UILocalNotification *notification, NSUInteger idx, BOOL *stop) { 
    NSLog(@"Notification %lu: %@",(unsigned long)idx, notification); 
}]; 
1

В Swift, чтобы увидеть все в настоящее время запланированные локальные уведомления, напечатанные в консоли:

print(UIApplication.sharedApplication().scheduledLocalNotifications) 
12

для Swift 3.0 и Swift 4,0

не забудьте сделать import UserNotifications

let center = UNUserNotificationCenter.current() 

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    center.getPendingNotificationRequests { (notifications) in 
     print("Count: \(notifications.count)") 
     for item in notifications { 
      print(item.content) 
     } 
    } 
} 
3

Swift 3.0.2:

UIApplication.shared.scheduledLocalNotifications 
1

В iOS 10, используя новую UserNotifications структуру:

UNUserNotificationCenter.current().getPendingNotificationRequests { (notificationRequests) in 

     print("Requests: \(notificationRequest)") 
} 
0

Swift 4

UNUserNotificationCenter.current().getPendingNotificationRequests(completionHandler: { (requests) in 

    for request in requests { 

     if request.identifier == "IDENTIFIER YOU'RE CHECKING IF EXISTS" { 

      //Notification already exists. Do stuff. 

     } else if request === requests.last { 

      //All requests have already been checked and notification with identifier wasn't found. Do stuff. 

     } 
    } 
}) 

Я использовал это, чтобы исправить ошибку, где же еженедельное уведомление уже установлено и будет установлено снова, когда приложение откроется, поэтому он будет поддерживать сброс таймера, чтобы он появился, что мне и он никогда не появлялся.

Смежные вопросы