通知中心和更改时区

时间:2017-11-16 10:37:58

标签: swift swift4 unusernotificationcenter

Swift 4& > iOS 10.0

我想在特定日期和特定时间安排本地通知(让我们说下午3点)。我希望通知总是在下午3点解雇,无论我在哪个时区(根据时区自动重新安排通知)。

以前,您可以调整UILocalNotifications'正好实现这一点的时区,就像在this SO post中完美解释一样。但是,在>iOS 10.0中,不推荐使用UILocalNotifications

这是我的代码:

func scheduleNotification(title: String, message: String, atDate: Date){

    let center = UNUserNotificationCenter.current()

    // Create content
    let content = UNMutableNotificationContent()
    content.title = title
    content.body = message
    content.sound = UNNotificationSound.default()

    // Create trigger
    let calendar = Calendar(identifier: .gregorian)
    let triggerDate = calendar.dateComponents([.year,.month,.day,.hour,.minute,.second,], from: atDate)
    let trigger = UNCalendarNotificationTrigger(dateMatching: triggerDate, repeats: false)

    // Create identifier
    let identifier = "\(UUID())"

    // Create request & add to center
    let request = UNNotificationRequest(identifier: identifier,
                                        content: content,
                                        trigger: trigger)
    center.add(request, withCompletionHandler: { (error) in
    })
  }

问题: 如何通过更改时区来正确地触发通知?

1 个答案:

答案 0 :(得分:3)

所以,我设法让它发挥作用。 triggerDate有一个timeZone变量,该变量自动为零,与UILocalNotification完全相同。

triggerDate.timeZone的行为与UILocalNotification.timeZone完全相同(this post中描述的行为,与问题中提到的相同)。

它似乎无法在模拟器上运行的原因之一是因为我在更改时区时没有重新启动模拟器。重新启动将使一切按预期工作。

Nota bene:也许重启不是强制性的,但由于现在运行的模拟器检测新时区所需的时间并不明显,我认为重新启动它是最有效的解决方案。