避免iOS EventKit startDate和endDate与现有事件重叠

时间:2015-01-18 12:26:22

标签: ios xcode calendar eventkit

我可以使用这个简单的代码段成功地将一些事件添加到日历中:

 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文档,但对我来说有点麻烦,我发现的例子与我得到的代码差别很大,这很好。

任何可能适合我的建议?

1 个答案:

答案 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];

我希望这有帮助!