如果重复设置为每日,则不会触发本地通知

时间:2016-12-22 20:00:13

标签: ios swift notifications swift3

我在尝试安排通知时遇到了一个非常奇怪的错误。用户提供他们想要获得本地通知的小时和分钟,他们可以选择是否希望每周或每月安排一次。

然而,我遇到了一个非常奇怪的问题。这是我的代码:

 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点时不会发出通知,实际上它什么也没发射。但是,我注意到,如果我将repeatInterval更改为NSCalendar.Unit.minute,那么突然之间,如果我安排了12:00的通知,并且它的时间是11:59,我真的在12:00收到它。

我的错误有什么问题吗?

1 个答案:

答案 0 :(得分:0)

仔细检查您设置为 notification.fireDate 的日期是否正确。有时由于没有设置适当的时区,日期和时间会发生变化,而且不会在您预期的时间到来。