даты, указанной в fireDate интерпретируется в соответствии со значением этого свойства. Если вы укажете nil (по умолчанию), дата пожара будет интерпретирована как абсолютное время по Гринвичу, что подходит для таких случаев, как в качестве таймеров обратного отсчета. Если вы назначаете действительный объект NSTimeZone этому свойству , дата огня интерпретируется как время настенных часов, которое автоматически корректируется при изменении часовых поясов; пример , подходящий для этого случая, является будильником.
localNotification.fireDate = timePicker.date
localNotification.timeZone = NSTimeZone.defaultTimeZone()
// the problem is here, you are setting the timezone after inputing your date
вы должны использовать localtimeZone и установить его перед установкой fireDate
localNotification.timeZone = NSTimeZone.localTimeZone()
localNotification.fireDate = timePicker.date
Примечание:
В прошивке 8 и более поздние версии приложения, которые используют локальные или удаленные уведомления должны регистрировать типы уведомлений, которые они намерены доставить. Затем система дает пользователю возможность ограничить типы уведомлений о вашем приложении . Система не значки значка, отображает предупреждающие сообщения или воспроизводит предупреждающие звуки, если какой-либо из этих типов уведомлений не включен для вашего приложения, даже если они являются , указанными в полезной нагрузке уведомления.
сделать так:
UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Badge | UIUserNotificationType.Sound | UIUserNotificationType.Alert, categories: nil))
создать расширение для объединения время определена с 0 секунд следующим образом:
extension NSDate {
var day: Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitDay, fromDate: self).day }
var month: Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitMonth, fromDate: self).month }
var year: Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitYear, fromDate: self).year }
var minute: Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitMinute, fromDate: self).minute }
var hour: Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitHour, fromDate: self).hour }
var fireDate: NSDate {
return NSCalendar.currentCalendar().dateWithEra(1, year: year, month: month, day: day, hour: hour, minute: minute, second: 0, nanosecond: 0)!
}
}
затем просто использовать его следующим образом:
localNotification.fireDate = timePicker.date.fireDate
Типы уведомлений уже зарегистрированы, а для режима выбора даты установлено значение Не время. Он работает, если fireDate установлен на определенный интервал, но не используется при выборе времени. Вопрос в том, как правильно использовать его с таймером. – Amur
Я обновил ответ. Проблема в том, что вы устанавливаете часовой пояс после установки firedate. –
На самом деле это не повлияло, но я понял, что получаю уведомления только не в точную минуту, секунды спустя, в зависимости от того, что я получил доступ к таймеру, который он начнет отсчитывать с этой секунды. – Amur