2016-12-22 1 views
0

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

Однако у меня возникла очень странная проблема. Это мой код:

func enableLocalNotifications() { 


    notificationsSwitch.isOn = true 
    notificationsOn = true 

    //first cancel all current local notifications 
    UIApplication.shared.cancelAllLocalNotifications() 

    //create new one according to input 

    let calendar = Calendar(identifier: .gregorian) 
    var fireComponents=calendar.dateComponents([.day, .month, .year], from:NSDate() as Date) 

    fireComponents.hour = notificationHour 
    fireComponents.minute = notificationMinute 
    fireComponents.second = 00 


    fireComponents.calendar = calendar 

    let notification = UILocalNotification() 
    notification.timeZone = NSTimeZone.local 
    notification.alertBody = notificationDescription 
    notification.alertTitle = "Reminder" 
    notification.fireDate = fireComponents.date 


    notification.soundName = UILocalNotificationDefaultSoundName 

    switch notificationRepeat { 
     case "Daily": 
      notification.repeatInterval = NSCalendar.Unit.minute 
     case "Weekly": 
      notification.repeatInterval = NSCalendar.Unit.weekOfYear 
     case "Monthly": 
      notification.repeatInterval = NSCalendar.Unit.month 
     default: 
      break 
    } 

    UserDefaults.standard.setValue(notificationRepeat, forKey: "notificationRepeat") 
    UserDefaults.standard.setValue(notificationDescription, forKey: "notificationDescription") 
    UserDefaults.standard.setValue(notificationHour, forKey: "notificationHour") 
    UserDefaults.standard.setValue(notificationMinute, forKey: "notificationMinute") 
    UserDefaults.standard.setValue(true, forKey: "notificationSet") 


} 

}

Самое смешное, если я, например, хочу, чтобы создать «ежедневно» уведомление в 12:00, и на данный момент это 11:59, его просто не будет запускать уведомление в 12:00, на самом деле он ничего не срабатывает. Однако я заметил, что если я изменил repeatInterval на NSCalendar.Unit.minute, то вдруг, если я планирую уведомление за 12:00, и это 11:59, я действительно получаю его в 12:00.

Есть ли какие-либо исправления для моей ошибки?

ответ

0

Двойная проверка, соответствует ли дата, указанная вами, notification.fireDate верна или нет. Иногда из-за того, что не заданы правильные часовые пояса, дата и время меняются, и это не придет в ожидаемое время.

+0

Привет, к сожалению, это не проблема, но я понял это вскоре после этого. Я был в приложении и ждал моих местных уведомлений. Однако, как только я закрываю приложение/позволяю ему работать в фоновом режиме, я получил все локальные уведомления в нужное время. Однако знаете ли вы, как я могу узнать, было ли локальное уведомление запущено, когда пользователь находится внутри приложения? – Misha