在我的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)
答案 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。