[英]How to trigger local notification fortnightly starting from a specific future date
I am trying to trigger UNUserNotification
fortnightly which will start from a specific future day. 我正在尝试每两周触发一次
UNUserNotification
,这将从特定的未来日期开始。 I have triggered successfully with UNTimeIntervalNotificationTrigger
. 我已经使用
UNTimeIntervalNotificationTrigger
成功触发了。 But my problem is I cannot set a specific start date here. 但是我的问题是我无法在此处设置特定的开始日期。
UNTimeIntervalNotificationTrigger* trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:(14*24*3600) repeats: YES];
request = [UNNotificationRequest requestWithIdentifier:identifier content:content trigger:trigger];
I've tried with WeekdayOrdinal
for UNCalendarNotificationTrigger
but that does not work exactly with fortnight duration always. 我已经尝试使用
WeekdayOrdinal
来进行UNCalendarNotificationTrigger
但这并不总是与两周时间完全一样。
Is there any way I can schedule local UNUserNotification
fortnightly from a specific day in future? 有什么办法可以让我从将来的特定日期每两周安排一次本地
UNUserNotification
?
UNNotificationRequest
does not provide anything to trigger fortnight recurring. UNNotificationRequest
不提供任何触发两周重复的功能。
With UNCalendarNotificationTrigger
you can only trigger following types of recurring: 使用
UNCalendarNotificationTrigger
您只能触发以下重复类型:
weekly
, daily
, monthly
, yearly
weekly
, daily
, monthly
, yearly
switch repeatType {
case .daily:
newComponents.hour = components.hour
newComponents.minute = components.minute
break
case .weekly:
newComponents.hour = components.hour
newComponents.minute = components.minute
newComponents.weekday = components.weekday
break
case .monthly:
newComponents.hour = components.hour
newComponents.minute = components.minute
newComponents.day = components.day
break
case .none:
newComponents.hour = components.hour
newComponents.minute = components.minute
newComponents.day = components.day
newComponents.month = components.month
newComponents.year = components.year
break
case .annually:
newComponents.hour = components.hour
newComponents.minute = components.minute
newComponents.day = components.day
newComponents.month = components.month
break
}
Although you can easily use EventKit
to create events and alarms within those events with all such recurring options you want like the fortnight, quarterly, half-yearly etc. 尽管您可以轻松地使用
EventKit
在事件中创建事件和警报,并提供所有您想要的重复选项,例如每两周,每季度,每半年一次等。
I have created this code to create events with multiple recurring types: 我创建了以下代码来创建具有多种重复类型的事件:
let eventStore = EKEventStore()
eventStore.requestAccess(to: .event, completion: { (granted, error) in
if (granted) && (error == nil) {
let event = EKEvent(eventStore: eventStore)
event.title = "Countdown title"
event.startDate = Date()
event.notes = "Countdown is complete!"
event.isAllDay = false
event.calendar = eventStore.defaultCalendarForNewEvents
var frequency : EKRecurrenceFrequency = EKRecurrenceFrequency.daily
var interval = 1
switch repeatType {
case .daily:
//Repeat every day
frequency = EKRecurrenceFrequency.daily
interval = 1
break
case .weekly:
//Repeat every week
frequency = EKRecurrenceFrequency.weekly
interval = 1
break
case .biweekly:
//Repeat every 2 weeks
frequency = EKRecurrenceFrequency.weekly
interval = 2
break
case .monthly:
//Repeat every month
frequency = EKRecurrenceFrequency.monthly
interval = 1
break
case .quarterly:
//Repeat every 3 months
frequency = EKRecurrenceFrequency.monthly
interval = 3
break
case .halfYearly:
//Repeat every 6 months
frequency = EKRecurrenceFrequency.monthly
interval = 6
break
default:
// Repeat every year
frequency = EKRecurrenceFrequency.yearly
interval = 1
}
let alarm : EKAlarm = EKAlarm(relativeOffset: TimeInterval(exactly: 0)!)
event.addAlarm(alarm)
if interval > 0 {
event.addRecurrenceRule(EKRecurrenceRule(recurrenceWith: frequency, interval: interval, end: nil))
}
do {
try eventStore.save(event, span: .thisEvent)
} catch let error as NSError {
print(error.localizedDescription)
return
}
} else {
print(error?.localizedDescription ?? "no error")
}
})
Please don't forget to import EventKit
. 请不要忘记导入
EventKit
。
Try with triggerWithDateMatchingComponents
method 尝试使用
triggerWithDateMatchingComponents
方法
Objective-C Example Code Objective-C示例代码
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:86400]; // You can set your date here.
NSDateComponents *triggerDate = [[NSCalendar currentCalendar]
components:NSCalendarUnitYear +
NSCalendarUnitMonth + NSCalendarUnitDay +
NSCalendarUnitHour + NSCalendarUnitMinute +
NSCalendarUnitSecond fromDate:date];
UNCalendarNotificationTrigger *trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:triggerDate repeats:NO];
Swift Example 迅捷的例子
let triggerDate = Calendar.current.date(byAdding: .day, value: 1, to: self)!
let trigger = UNCalendarNotificationTrigger(dateMatching: triggerDate, repeats: false)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.