Как отправить localNotification в определенное время каждый день, даже если это время прошло?

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

var dateFire: NSDateComponents = NSDateComponents() var getCurrentYear = dateFire.year var getCurrentMonth = dateFire.month var getCurrentDay = dateFire.day dateFire.year = getCurrentYear dateFire.month = getCurrentMonth dateFire.day = getCurrentDay dateFire.hour = 7 dateFire.minute = 0 dateFire.timeZone = NSTimeZone.defaultTimeZone() var calender: NSCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! var date: NSDate = calender.dateFromComponents(dateFire)! var localNotification = UILocalNotification() localNotification.fireDate = date localNotification.alertBody = "A new day has begun and a fresh layer on snow lies on the mountain! Can you beat your highscore?" localNotification.repeatInterval = NSCalendarUnit.CalendarUnitDay UIApplication.sharedApplication().scheduleLocalNotification(localNotification) 

Как вы можете видеть, NSCalendarUnit.CaldendarUnitDay заставляет его работать каждый день в 7 утра. Я не знаю, так что, даже если время после 7 утра, уведомление будет продолжаться на следующий день, будет очень признателен

3 Solutions collect form web for “Как отправить localNotification в определенное время каждый день, даже если это время прошло?”

Обновлен ответ Paulw11 на Swift 3.0 и завершен в функции:

 /// Set up the local notification for everyday /// - parameter hour: The hour in 24 of the day to trigger the notification class func setUpLocalNotification(hour: Int, minute: Int) { // have to use NSCalendar for the components let calendar = NSCalendar(identifier: .gregorian)!; var dateFire = Date() // if today's date is passed, use tomorrow var fireComponents = calendar.components( [NSCalendar.Unit.day, NSCalendar.Unit.month, NSCalendar.Unit.year, NSCalendar.Unit.hour, NSCalendar.Unit.minute], from:dateFire) if (fireComponents.hour! > hour || (fireComponents.hour == hour && fireComponents.minute! >= minute) ) { dateFire = dateFire.addingTimeInterval(86400) // Use tomorrow's date fireComponents = calendar.components( [NSCalendar.Unit.day, NSCalendar.Unit.month, NSCalendar.Unit.year, NSCalendar.Unit.hour, NSCalendar.Unit.minute], from:dateFire); } // set up the time fireComponents.hour = hour fireComponents.minute = minute // schedule local notification dateFire = calendar.date(from: fireComponents)! let localNotification = UILocalNotification() localNotification.fireDate = dateFire localNotification.alertBody = "Record Today Numerily. Be completely honest: how is your day so far?" localNotification.repeatInterval = NSCalendar.Unit.day localNotification.soundName = UILocalNotificationDefaultSoundName; UIApplication.shared.scheduleLocalNotification(localNotification); } 

Обновленная версия (Swift 2.0)

  let calendar: NSCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! var dateFire=NSDate() var fireComponents=calendar.components([.Month, .Day, .Hour, .Minute], fromDate:NSDate()) if (fireComponents.hour == 7) { dateFire=dateFire.dateByAddingTimeInterval(86400) // Use tomorrow's date fireComponents=calendar.components([.Month, .Day, .Hour, .Minute], fromDate:NSDate()) } fireComponents.hour = 7 fireComponents.minute = 0 dateFire = calendar.dateFromComponents(fireComponents)! let localNotification = UILocalNotification() localNotification.fireDate = dateFire localNotification.alertBody = "Don't forget to visit Quote Daily to receive daily motivation." localNotification.repeatInterval = NSCalendarUnit.Day UIApplication.sharedApplication().scheduleLocalNotification(localNotification) 

Вам нужно проверить текущий час, и если он будет позже 6:59, вам нужно запланировать свое уведомление на завтра – это не позволит вашему уведомлению планироваться в прошлом –

 var calendar: NSCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! var dateFire=NSDate() var fireComponents=calendar.components(NSCalendarUnit.CalendarUnitDay|NSCalendarUnit.CalendarUnitMonth|NSCalendarUnit.CalendarUnitYear|NSCalendarUnit.CalendarUnitHour|NSCalendarUnit.CalendarUnitMinute, fromDate:dateFire) if (fireComponents.hour >= 7) { dateFire=dateFire.dateByAddingTimeInterval(86400) // Use tomorrow's date fireComponents=calendar.components(NSCalendarUnit.CalendarUnitDay|NSCalendarUnit.CalendarUnitMonth|NSCalendarUnit.CalendarUnitYear|NSCalendarUnit.CalendarUnitHour|NSCalendarUnit.CalendarUnitMinute, fromDate:dateFire) } fireComponents.hour = 7 fireComponents.minute = 0 dateFire = calendar.dateFromComponents(fireComponents)! var localNotification = UILocalNotification() localNotification.fireDate = dateFire localNotification.alertBody = "A new day has begun and a fresh layer on snow lies on the mountain! Can you beat your highscore?" localNotification.repeatInterval = NSCalendarUnit.CalendarUnitDay UIApplication.sharedApplication().scheduleLocalNotification(localNotification) 
  • Проверьте, работает ли приложение или пользовательский интерфейс тестирования
  • Автозапуск игнорируется в пользовательском UITableViewCell
  • Как дождаться завершения всех NSOperations?
  • Преобразование строк в float в Swift Beta 5
  • Ежедневное локальное уведомление в Swift iOS 9.2
  • Как выбрать элемент представления выбора в тесте iOS UI в Xcode?
  • Как отобразить индикатор активности в центре UIAlertController?
  • Расширенные перечисления Java в Swift
  • Фоновая выборка не работает
  • IBDesignable Ошибки при добавлении к тестированию
  • Как получить номер CNContact в виде строки в Swift?
  • Interesting Posts

    Настройка фонового изображения / просмотра в режиме просмотра камеры?

    ReloadData для UITableView не работает; tableView возвращает NULL при регистрации

    Как правильно выпустить CGMutablePathRef в -dealloc?

    Устанавливать приоритет для настраиваемой последовательной асинхронной очереди

    Текстовые прокрутки вне границы окна UITextView

    Не удалось загрузить NIB в пакете: «NSBundle при использовании раскадровки

    ObjC блокирует & открываетs C обратные вызовы

    iOS магазин в iTunes

    Наличие фона NSTimer

    Получение дублирующего push-уведомления ios9

    Пользовательское текстовое поле – зеркальная автокоррекция

    Синхронизация удаленных данных JSON с локальным хранилищем кешей в iOS Swift

    Интеграция Google+ iOS – ошибка EXC_BAD_ACCESS при выводе

    Как отклонить контроллеры представлений в любое время (даже во время переходов) или когда можно с уверенностью закрыть диспетчер представлений?

    Изменить имя сертификата распространения iOS

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.