用例是有一种用户可以说的表格:我想在X天(例如星期一,星期五和星期日)的14:00收到通知。该应用程序是本机响应的,但我只是调用本机swift函数来安排通知:
import Foundation
import UserNotifications
@objc(Reminders)
class Reminders: NSObject {
@objc func setReminder(
_ message: NSString,
daysV days: NSArray,
hourV hour: NSInteger,
minuteV minute: NSInteger
) {
// We'll replace all scheduled notifications entirely
UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
// Create a notification for each day that has been passed
let daysC: [Int] = days.map { $0 as! Int }
for day in daysC {
var date = DateComponents()
date.weekday = day
date.hour = hour
date.minute = minute
let content = UNMutableNotificationContent()
content.title = "Reminder"
content.body = message as String
let userCalendar = Calendar(identifier: .iso8601)
let dateTime = userCalendar.date(from: date)
let triggerDate = Calendar.current.dateComponents([.weekday,.hour,.minute], from: dateTime as! Date)
let trigger = UNCalendarNotificationTrigger(dateMatching: triggerDate, repeats: true)
let identifier = "TMWTE\(day)"
let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger)
let center = UNUserNotificationCenter.current()
center.add(request, withCompletionHandler: { (error) in
if let error = error {
print(error);
}
})
}
}
}
我想做的是让每个工作日都包含在JS发送的列表中,并为其安排通知。因此,如果用户选择星期一和星期三,则数组将为[1,3]
,我将分别安排每天的通知。
但是实际上发生的是第一天我一次收到X通知。因此,如果用户选择全天,则在下一个triggerDate
中,我会收到7条通知。
作为Swift的新手,我可能做的事情很不理性,但是目前我还无法弄清楚。现在,我还尝试将date.day
设置为下一个星期六,星期日等。但这不会显示任何通知,这使我觉得这里缺少基本信息。
谢谢!