2016-01-27 5 views
0

Я хочу создать ежедневное уведомление в 10 утра с различным содержанием на каждый день.Повторение NSLocalNotification. Отклонив. Правильный способ

func createNotification() { 

let dateComp:NSDateComponents = NSDateComponents() 
dateComp.hour = 10; // supposed to run each day at 10AM 

var myCalendar:NSCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! 
var date:NSDate = myCalendar.dateFromComponents(dateComp)! 

let localNotification = UILocalNotification() 
localNotification.fireDate = date 
localNotification.alertBody = getContentStringForNotification() // Method returns different string for each date 
localNotification.repeatInterval = .Day // Repeats every day 
localNotification.timeZone = NSTimeZone.defaultTimeZone() 
UIApplication.sharedApplication().scheduleLocalNotification(localNotification) 

} 

Он дублирует уведомления. Они продолжают повторять и возвращать даже вчерашние уведомления. Я искал ответы на вопросы в Stack Community, я не нашел подходящего способа их отклонить.

Как я понимаю:

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

Помощь с:

  1. Что правильный способ уволить их или проверить, если они были уволены уже (убедившись, что они не повторяют
  2. Do I цикл и создавать уведомления для всех год вперед на каждый день или создать новый на завтра каждый раз, когда приложение запускается

Что я упускаю? Код приветствоваться. Спасибо!

ответ

2

Вы планирование одно уведомления в этом коде, с одно сообщение, которое будет отображаться пользователю один раз в день. Если вы запускаете этот код каждый раз, когда вы открываете приложение, или каждый день, вы получите множество разных уведомлений, каждый из которых будет запускаться один раз в день и с некоторым (возможно, другим) сообщением.

Вы должны использовать cancelAllLocalNotifications или cancelLocalNotification: для удаления старых уведомлений.

Вероятно, вы не хотите устанавливать интервал повторения. Вместо этого каждый раз при открытии приложения расписанию 7 уведомлений в последующие дни на следующую неделю. Если пользователь не использовал приложение через 7 дней, вы, вероятно, должны перестать беспокоиться о них с помощью уведомлений (хотя вы можете зарегистрировать больше до предела приложения).

+0

Проверка того: Должен ли я писать последнюю дату запуска приложения в plist или есть готовый метод проверки последнего времени выполнения? – thinkswift

+0

вы можете, если вам нужно это знать – Wain

+0

Наверное, не потрудитесь с этим и просто отмените их все и создайте новые. Изменен мой код сейчас и надеюсь, что это отлично работает завтра. Вернемся к этому. – thinkswift

6
localNotification.repeatInterval = .Day // Repeats every day 

Это делает автоматическое расписание для каждого дня, поэтому вы не должны планировать новое уведомление, если хотите показывать одно и то же уведомление (время и прочее).

Если вы хотите перенести уведомление, первый ясно все предыдущие местные уведомления по расписанию или прочитать в документации о том, как удалить одну UILocalNotification

UIApplication.sharedApplication().cancelAllLocalNotifications() 
+0

Спасибо за строку кода 'UIApplication.sharedApplication(). CancelAllLocalNotifications()' – thinkswift

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