I would like to register in the iPhone calendar, using addAlarm of a EKevent, a number of alarms from days stored into an array.
The result however is only the registration of the last date of N included.
Debugging the FOR cycle, in the variable idEvent I always find the same id.
These are the relevant steps to the management of the alarms:
let store = EKEventStore()
…
func PlanDays(sType: String) {
//Calculates the days to schedule on the bases of the rules and records them in the array.
var dayToPlan = [NSDate]()
…..
// An example of adding an extra date:
var dateformatter = NSDateFormatter()
dateformatter.timeZone = NSTimeZone(name: “GMT”)
dateformatter.dateStyle = NSDateFormatterStyle.MediumStyle
dateformatter.locale = NSLocale(localeIdentifier: “it_IT”)
var From: NSDate = dateformatter.dateFromString(txtdateFrom.text)!
dayToPlan.append(From)
}
…
// Popup asking if I’ld like to proceed and if I do:
let Procedo = UIAlertAction(title: “YES!”, style: .Default) { action -> Void in
var ret: Bool = false
var event = EKEvent(eventStore: self.store)
var err: NSError?
event.calendar = self.store.defaultCalendarForNewEvents
for giorno in dayToPlan {
event.startDate = giorno
event.endDate = giorno
event.title = self.txtTesto.text
event.addAlarm(EKAlarm(absoluteDate: event.startDate))
ret = self.store.saveEvent(event, span: EKSpanThisEvent, commit: true , error: &err)
idEvento = event.eventIdentifier
}
….
}
Can anyone help me?
Thanks
You're creating the EKEvent
instance outside the loop, that results in reusing the same instance again and again. If you want one single event for each day / al giorno create a new event inside the loop.
let Procedo = UIAlertAction(title: “YES!”, style: .Default) { action -> Void in
var ret: Bool = false
var err: NSError?
event.calendar = self.store.defaultCalendarForNewEvents
for giorno in dayToPlan {
let event = EKEvent(eventStore: self.store)
event.startDate = giorno
event.endDate = giorno
event.title = self.txtTesto.text
event.addAlarm(EKAlarm(absoluteDate: event.startDate))
ret = self.store.saveEvent(event, span: EKSpanThisEvent, commit: true , error: &err)
idEvento = event.eventIdentifier
}
….