我可以使用这个简单的代码段成功地将一些事件添加到日历中:
var eventStore : EKEventStore = EKEventStore()
eventStore.requestAccessToEntityType(EKEntityTypeEvent, completion: {
granted, error in
if (granted) && (error == nil) {
println("Access granted to calendar \(granted)")
println("No error or error is simply \(error)")
var event:EKEvent = EKEvent(eventStore: eventStore)
event.title = fullTitle
event.startDate = startDate
event.endDate = endDate
event.notes = "This is a note"
event.calendar = eventStore.defaultCalendarForNewEvents
eventStore.saveEvent(event, span: EKSpanThisEvent, error: nil)
println("Saved Event")
}
我可以处理错误和授权问题,但我希望确保没有重叠,甚至在我添加新的日历活动时只有一分钟。
默认情况下它只是"重载",我可以在同一时间设置很多事件,但我不想要这种行为......所以,我的意思是startDate和endDate应该设置在空插槽上,如果已经设置了某些内容,我希望提前通知。
我阅读了EventKit文档,但对我来说有点麻烦,我发现的例子与我得到的代码差别很大,这很好。
任何可能适合我的建议?
答案 0 :(得分:0)
很简单,您可以在保存之前搜索事件是否存在。如果事件存在则不添加它。
要查找是否存在事件,您可以使用以下内容:
NSString *predicateString= [NSString stringWithFormat:@"title == '%@' AND location == '%@' AND notes == '%@'", event.title, event.location, event.notes ];
NSPredicate *matches = [NSPredicate predicateWithFormat:predicateString];
NSArray *datedEvents = [self.eventStore eventsMatchingPredicate:[eventStore predicateForEventsWithStartDate:event.startDate endDate:event.endDate calendars:nil]]; //search in all calendars
NSArray *matchingEvents = [datedEvents filteredArrayUsingPredicate:matches];
我希望这有帮助!