Как отправить 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) 
  • Обращение с недействительным уведомлением о токенах из Facebook SDK
  • Alamofire 4.0 Загрузить MultipartFormData Header
  • Изменение выбранного изображения в UITabBarItem в Swift
  • Работа с компонентами NSDate в Swift
  • Показать маркер, где пользователь вводит полилинию
  • canOpenURL для открытия других приложений - не работает на симуляторе
  • Могу ли я создать UIContainerView программно?
  • Как взять UIImage из AVCaptureVideoPreviewLayer вместо захвата AVCapturePhotoOutput
  • Как реализовать интерактивную обработку ячеек для запуска анимации перехода, например WhatsApp
  • iOS swift Почтовый запрос
  • Как получить следующие 10 дней с текущей даты в быстрой
  • Interesting Posts

    Расширение клавиатуры iOS 8: как скопировать / вставить аудио или видеоклип в сообщения?

    Отображение пути assets.xcassets программно с использованием SWIFT

    Сбой при замене дочернего VC с помощью ограничения ViewController

    почему мой делегат didEnterRegion не звонил?

    Уведомления iOS Push не работают для специальных распределений с тестовым полетом

    Отображаемые номера, знаки оператора и сумма в UILabel

    Сбой приложений Mac (убит из-за прав) независимо от того, включены ли права

    Не удалось выполнить сканирование через CBCentral Manager с идентификатором службы для iBecon Signal

    Как добиться чего-то вроде NSLineBreakByTruncatingHead для UITextField?

    UITextField secureTextEntry пули с пользовательским шрифтом?

    Проект iOS: анализ статического / динамического кода и графики вызовов

    Любое предложение метода оптимизации для приложений Core Animation?

    Загрузить UIImage в фоновом режиме

    Создание NSNumber с переменной #define

    iOS 7 Safari автоматически сокращает / скрывает элементы пользовательского интерфейса, не работающие при прокрутке

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