带有开始日期的 UNCalendarNotificationTrigger

Posted

技术标签:

【中文标题】带有开始日期的 UNCalendarNotificationTrigger【英文标题】:UNCalendarNotificationTrigger with start date 【发布时间】:2018-11-13 03:41:13 【问题描述】:

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

    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】:

仅使用 UNCalendarNotificationTrigger 是不可能的。

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

一种方法可以是:

    检查所选日期是否为本周

-> 如果为真:注册通知

-> IF FALSE: 将日期写入 UserDefaults。

    在 didBecomeActive() 或 viewDidLoad() 中,您可以从 UserDefaults 加载日期并检查日期是否在本周内,如果是,则注册通知。

【讨论】:

这意味着用户需要在所选日期的那一周打开应用程序? 是的。如果你想绕过这个,你可以用 fire base 注册推送通知 不过,我认为用户在那周打开应用的可能性应该很大 只是担心用户是否在周一早上设置了闹钟。不过感谢您的回答,会按照您的方法进行。 用户只需要在提前7天之一打开应用。我怀疑 7 天内没有使用过您的应用的人会在意

以上是关于带有开始日期的 UNCalendarNotificationTrigger的主要内容,如果未能解决你的问题,请参考以下文章

带有问题编号和开始日期的支付卡验证

带有日期列表的 Pyspark DF(使用 PANDAS)从今天开始 BACK 1 年

如何使用另一个表中的日期列过滤一个表的开始和结束日期

带有日期的循环的 Excel VBA 脚本

带有时间的日期字符串的 TextToColumns

带有自定义日期的 UIPickerView