首页 > 解决方案 > 每 n 天重复一次本地通知

问题描述

我正在尝试创建将每 n 天发送一次本地通知的应用程序。

我有包含通知信息的DailyRepeat结构:

struct DailyRepeat: BaseRepeat {

    var title: String
    var body: String
    var date: Date

    var day: Int

}

以及安排通知的方法:

func notifyDaily(at notification: DailyRepeat) {
    let content = generateContent(title: notification.title, body: notification.body)
    let dateComponents = DateComponents(day: notification.day, hour: notification.date.time.hours, minute: notification.date.time.minutes)
    let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)
    let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)

    notificationCenter.add(request)
}

我的第一个想法是在第一次触发日期创建UNCalendarNotificationTrigger ,而不是处理通知并设置UNTimeIntervalNotificationTrigger,但不幸的是,我找不到在没有用户交互的情况下处理通知接收的方法。

任何想法它应该如何工作?

标签: iosswiftnotificationsuilocalnotificationnsnotificationcenter

解决方案


根据文档,如果您希望通知重复,您需要为日期组件设置可重复的约束。

因此,要将通知设置为每天早上 8:30 运行,您只需设置小时和分钟并将其设置为重复。

var date = DateComponents()
date.hour = 8
date.minute = 30 
let trigger = UNCalendarNotificationTrigger(dateMatching: date, repeats: true)

我不认为您可以使用重复来每 x 天重复一次,您可以设置一周中的特定日期或月份中的日期,但不能每 n 天设置一次。

您可以设置TimeIntervalx 天并重复该操作,但要确定开始它的确切时间可能会很棘手。


推荐阅读