Swift 3本地通知不会触发

我有以下设置,并没有任何通知是在所有的射击。

根据堆栈上的其他类似问题,我已经为每个请求添加了一个唯一的标识符,并且还将内容添加到了内容中。

我有这个要求用户许可的function。

func sendIntNotifications() { //1. Request permission from the user UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound], completionHandler: { (granted, error) in if granted { print ("Notification access granted") } else { print(error?.localizedDescription) } UNUserNotificationCenter.current().delegate = self }) // This function has a lot of other code that then calls this function to set multiple notifications : for daysInt in outputWeekdays { scheduleActualNotification(hourInt: hourInt, minuteInt: minuteInt, dayInt: daysInt) } } 

这些是主要function:

 func scheduleActualNotification(hourInt hour: Int, minuteInt minute: Int, dayInt day: Int) { // 3.1 create date components for each day var dateComponents = DateComponents() dateComponents.hour = hour dateComponents.minute = minute dateComponents.day = day //3.2 Create a calendar trigger for that day at that time let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true) //3.3 Message content let content = UNMutableNotificationContent() content.title = "Test Title" content.body = "Test body" content.badge = 1 // 3.4 Create the actual notification let request = UNNotificationRequest(identifier: "bob \(i+1)", content: content, trigger: trigger) // 3.5 Add our notification to the notification center UNUserNotificationCenter.current().add(request) { (error) in if let error = error { print("Uh oh! We had an error: \(error)") } } } 

这个function是当这个应用程序打开时收到通知

 func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { completionHandler([.alert, .sound]) //calls the completionHandler indicating that both the alert and the sound is to be presented to the user } 

有没有错误,哈哈!

编辑:

所以从用户界面,我select了2350和周六和周日。 我希望通知在周六和周日的2350发送。

print(daysInt) 。 它的第一个值是1,第二个值是7,正如预期的那样。 其次,我进入了函数scheduleActualNotification ,时间的值是23,分钟是50,正如所料。

谢谢!

所以经过几周的挫折,这是解决scheme:

dateComponents.day = dayreplace为dateComponents.weekday = day.day是一个月中的一天,而.weekday是一周中的一天!

也不要使用dateComponents.year = 2017因为这导致通知不会触发。

通知现在工作得很好!

日历单元标志可以帮助您:

 var notificationTriggerCalendar : UNCalendarNotificationTrigger? = nil if let fireDate = trigger.remindAt { let unitFlags = Set<Calendar.Component>([.hour, .year, .minute, .day, .month, .second]) var calendar = Calendar.current calendar.timeZone = .current let components = calendar.dateComponents(unitFlags, from: fireDate) let newDate = Calendar.current.date(from: components) notificationTriggerCalendar = UNCalendarNotificationTrigger.init(dateMatching: components, repeats: true) }