2

使用Swift5.2、iOS13.4、

我尝试设置一个在特定日期触发并每分钟无限重复的本地通知。

我尝试通过以下方式使用 Calendar.components 和 UserNotification:

// create alarmDate in the future
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd HH:mm"
let alarmDate = formatter.date(from: "2020/05/15 20:31") ?? Date()

let repeatesBool = true  // the alarm shall repeat every minute
let calendarComponentSet: Set<Calendar.Component> = [.second]  // mask to repeat every minute

let alarmIdentifier = "myID1234"
let triggerKind = Calendar.current.dateComponents(calendarComponentSet, from: alarmDate)
let trigger = UNCalendarNotificationTrigger(dateMatching: triggerKind, repeats: repeatesBool)                
let request = UNNotificationRequest(identifier: alarmIdentifier, content: content, trigger: trigger)

notificationCenter.add(request) {(error) in 
    if let error = error { print("error: \(error)") } 
}

.

问题:

一旦我在alarmDate 上的任何时间执行上述代码,警报就会立即开始触发(而不是在alarmDate 时间,即实际达到小时和分钟时)。或者换句话说:当alarmDate 应该在20:31 开始时,并且我在例如16:00 执行上述代码时,它已经触发了警报(而不是预期的20:31)。这是为什么 ?

在上面的代码中,如果我将 calendarComponentSet 设置如下,我确实会在正确的日期和时间触发警报 - 但它不会按预期每分钟重复一次:

let calendarComponentSet: Set<Calendar.Component> = [.day, .month, .year, .hour, .minute, .second]

所以问题:

您如何创建在特定日期和时间触发并在此后每分钟无限重复的本地通知?

(目标是为此只花费一个本地通知)。

4

0 回答 0