Как запланировать и повторить локальное уведомление - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь подать заявку, чтобы помочь бросить курить,

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

Пример: пусть скажет свою первую сигарету в 7:00, и он курит 1 сигарету каждые 1 час, и он хочет добавить дополнительные 10 минут.

итак, первая сигарета: 7:00, 2: 8: 10/3: 9: 20/4: 10: 30 ... и т. д.

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

Любая помощь?

Ответы [ 3 ]

0 голосов
/ 10 ноября 2019

сначала создайте объект даты с помощью

let date = Date(timeIntervalSinceNow: 3600) // it may be any date whatever you want 

Чтобы создать триггер из компонентов даты:

let triggerDaily = Calendar.current.dateComponents([hour,.minute,.second,], from: date)

Теперь передайте эту дату в UNCalendarNotificationTrigger с повторениями true

let trigger = UNCalendarNotificationTrigger(dateMatching: triggerDaily, repeats: true)

Создайте дату со временем:

let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd HH:mm"
let someDateTime = formatter.date(from: "2016/10/08 22:31") // put your date and time here

если локаль определенное время:

 formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
0 голосов
/ 10 ноября 2019

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

let trigger = UNTimeIntervalNotificationTrigger(timeInterval: (60*60) + (10*60), repeats: true)

60 * 60 - это час, который вы упомянули, и 10 * 60 -10 минут, установите повторение на true и альт, ваше уведомление теперь срабатывает каждые 70 минут.

0 голосов
/ 10 ноября 2019

Чтобы получить дату в другом формате, вы можете создать NSDate из объекта Date и затем использовать NSDateFormatter для форматирования:

let date=NSDate(timeInterval: 0, since: yourDate)
let dateFormatter=DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US")
dateFormatter.setLocalizedDateFormatFromTemplate("hh:mm a")
String dateString=dateFormatter.string(from: date)

Вы можете получить начальный объект даты из UIDatePicker или когда онизменения и метод вызывается в его делегате.

...