0
- 我設置一個事件,說一個月的13日,並重復它每個月。它每個月都會重複一遍。 但是,如果將其設置爲某個月的第31個月,它將僅在第31個月中設置爲幾個月,並且在每個第31個月每個月重複編輯 - >重複 - >重複。
- 我希望它至少設置爲最後一天的月份,如果沒有日期的第31個月可用。
- 同樣在2月份的29,30或31月份,也不會創建這些日期的其他月份的事件。
請注意,我們想要設置連續的事件集,以便刪除和編輯它們很容易。設置事件重複「重複每月」而不是「重複每個月,每個第31」ios
我寫了下面的代碼:
let eventstore : EKEventStore = EKEventStore()
eventstore.requestAccess(to: EKEntityType.event, completion: { (isallow, error) -> Void in
var event:EKEvent!
if (event == nil) {
event = EKEvent(eventStore: eventstore)
event.title = self.getReminderTitleForCalendarEvent(dtDate: date)
event.notes = ""
event.startDate = date
event.endDate = date
event.calendar = eventstore.defaultCalendarForNewEvents
let ekrules: EKRecurrenceRule = EKRecurrenceRule.init(recurrenceWith: EKRecurrenceFrequency.monthly, interval:self.selectedFrequency!, end: nil)
event.recurrenceRules = [ekrules]
}
else // if there is already a event then update date
{
// if event is deleted by user
event.startDate = date
event.endDate = date
if let oldalarm = event.alarms?[0]// remove old date alarm
{
event.removeAlarm(oldalarm)
}
// Below code is to remove existing event
do
{
try eventstore.remove(event, span: .thisEvent)
//self.objselectedinfusion.strEventId = event.eventIdentifier
}
catch let error as NSError {
//print(error.localizedDescription)
}
}
let alarm = EKAlarm(relativeOffset: self.getTimeIntervalForAlert())
let alarm = EKAlarm(absoluteDate: reminderFireDate as Date)
event.addAlarm(alarm)
do
{
try eventstore.save(event, span: EKSpan.futureEvents, commit: true)
UserDefaults.standard.set(event.eventIdentifier, forKey: Constant.calendarEventID)
}
catch let error as NSError {
//print(error.localizedDescription)
}
})
這裏selectedFrequency
復發間隔時間是幾個月的一些數字。
SO更喜歡解釋代碼的答案。你能解釋這是如何工作的,爲什麼這個代碼解決了OP的問題? – toonarmycaptain
請閱讀 - 上述答案並不完整 - 您必須創建複雜的重複規則。 https://developer.apple.com/documentation/eventkit/ekrecurrencerule/1507320-init –