【问题标题】:Avoid iOS EventKit startDate and endDate overlapping with existing events避免 iOS EventKit startDate 和 endDate 与现有事件重叠
【发布时间】:2015-01-18 12:26:21
【问题描述】:

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

 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,则拒绝添加新事件?
  • @Krumelur 这可能是一个选项,你能给我一个提示或引用我的代码/方法吗?非常感谢。
  • @Krumelur 非常感谢。我读过它,但我不清楚,它都是 Objective-C 代码,它可能已被弃用,简而言之,我找不到可以检查我的日期内是否有任何事件的方法。
  • “都是Objective-C”是什么意思?当然是,它适用于 iOS/Mac。它是 ObjC 或 Swift - 你在用什么?

标签: ios xcode calendar eventkit


【解决方案1】:

您可以在保存之前搜索该事件是否存在。如果事件存在,则不添加它。

要查找事件是否存在,您可以使用以下内容:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2017-03-02
    相关资源
    最近更新 更多