我在尝试安排通知时遇到了一个非常奇怪的错误。用户提供他们想要获得本地通知的小时和分钟,他们可以选择是否希望每周或每月安排一次。
然而,我遇到了一个非常奇怪的问题。这是我的代码:
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收到它。
我的错误有什么问题吗?
答案 0 :(得分:0)
仔细检查您设置为 notification.fireDate 的日期是否正确。有时由于没有设置适当的时区,日期和时间会发生变化,而且不会在您预期的时间到来。