UNCalendarNotificationTrigger与开始日期

时间:2018-11-13 03:41:14

标签: ios swift

我正在尝试制作一个提醒应用程序,但是我很难设置提醒的开始日期。我可以使用下面的代码来使本地通知工作。使用此代码,我可以在每个星期二由用户设置的时间(以“小时”和“分钟”表示)获得本地通知。

    if tuesdayIsChecked == true {

        AlarmSupportFileX.tuesdaySelectedBool = true

        hour = hourDateFormatter.string(from: datePicker.date)
        minute = minuteDateFormatter.string(from: datePicker.date)

        var dateComponents = DateComponents()
        dateComponents.weekday = 3
        dateComponents.hour = Int(hour)
        dateComponents.minute = Int(minute)

        print(dateComponents)

        let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)
        let requestIdentifier = "\(randomGeneratedString)Tuesday"
        let request = UNNotificationRequest(identifier: requestIdentifier, content: content, trigger: trigger)

        UNUserNotificationCenter.current().add(request, withCompletionHandler: { error in
            //Handle error

        })

    }

我的问题是我只希望它在用户选择的日期上触发。 示例:如果我在2018年11月12日(星期一)使用上面的代码,则会在2018年11月13日(星期二)及随后的所有星期二触发通知。

假设用户选择要在星期二触发的警报(dateComponents.weekday = 3)。如果用户在11月12日(星期一)设置了通知,并且他们选择了11月25日(星期日)的开始日期,我希望它仅显示在11月27日(星期二)及随后的所有星期二进行通知。我该如何实现?

1 个答案:

答案 0 :(得分:0)

仅使用UNCalendarNotificationTrigger不可能。

您需要为应用设置某种机制,以便在星期二的一周内设置该通知。

一种执行此操作的方法可能是:

  1. 检查所选日期是否是本周

-> 如果是:注册通知

-> 如果错误::将日期写入UserDefaults。

  1. 然后在didBecomeActive()或viewDidLoad()中,您可以从UserDefaults加载日期,并检查日期是否在本周,如果是这种情况,请注册通知。