使用CoreData属性创建UILocalNotifications

时间:2017-09-09 18:07:32

标签: swift uilocalnotification

在我的iOS应用中,我尝试创建一个localNotification,以便在事件开始前15分钟通知用户。但是我被卡住了。我使用CoreData来存储数据。我有一个Appointment对象可以创建。 date属性与Appointment对象相关联。我真的很困惑。我不知道如何设置timeInterval以及通知过程的其余部分。

我不知道如何在创建timeInterval之前将Appointment设置为开始之前的15分钟。

以下是我的一些代码:

func scheduleNotifications() {
    let content = UNMutableNotificationContent()
    guard let client = client, let name = client.name, let formula = formula, let date = formula.date else { return }
    content.title = "BookMe"
    content.subtitle = ""
    content.body = "Your appointment with \(name) will begin soon."
    content.badge = 1

    let trigger = UNTimeIntervalNotificationTrigger(timeInterval: ??, repeats: false)

编辑:这就是我所拥有的,但没有任何东西在解雇。

let date = formula.date
let fireDate = Calendar.current.date(byAdding: DateComponents(minute: -15), to: date as Date)
guard let timeInterval = fireDate?.timeIntervalSince(Date()) else { return }

let trigger = UNTimeIntervalNotificationTrigger(timeInterval: timeInterval, repeats: false)

let request = UNNotificationRequest(identifier: self.timerUserNotificationIdentifier, content: content, trigger: trigger)

UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)

1 个答案:

答案 0 :(得分:0)

根据我的理解,您希望在某个日期之前的15分钟之间找到一个时间间隔,以便您可以在该日期前15分钟发出通知。

这是我在操场上敲门的一个简单例子

// Create a date in the future - this is what you get from your own data object and I'm creating it here just so I have a date.
let scheduledDate = Calendar.current.date(from: DateComponents(year: 2017, month: 09, day: 22, hour: 22))!

// Create a date 15 minutes earlier than your shcheduled date, this is when you want your notification to fire
let fireDate = Calendar.current.date(byAdding: DateComponents(minute: -15), to: scheduledDate)!

// Then just work out the time interval between the fire date and now to get the time interval
let timeInterval = fireDate.timeIntervalSince(Date())

请原因展开创建日期的力量,这是因为它是一个例子,你应该不使用感叹号并优雅地处理错误。

已修改以添加

您尝试使用的UNTimeIntervalNotificationTrigger需要now之间的TimeInterval和您要触发通知的时间。 TimeInterval是一个表示秒数的Double。在某些情况下,例如这个,它表示一个延迟,即从现在到您要触发通知的时间之间的秒数。在其他情况下,它表示从固定日期开始的秒数。此固定日期为timeIntervalSince1970 - "日期对象与1970年1月1日00:00:00 UTC之间的间隔。"这是您用于UNIX时间戳或timeIntervalSinceReferenceDate - "日期对象与2001年1月1日00:00:00 UTC之间的间隔。"

无论你做什么,都要通过直接添加或删除秒数来抵制修改日期的诱惑,而是使用DateComponents。