在iOS中的用户选择的工作日安排本地通知

时间:2019-11-16 19:04:36

标签: ios swift react-native notifications

用例是有一种用户可以说的表格:我想在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设置为下一个星期六,星期日等。但这不会显示任何通知,这使我觉得这里缺少基本信息。

谢谢!

0 个答案:

没有答案