如何检索大于1个月的EKEvent?

时间:2017-01-07 19:35:37

标签: ios swift eventkit

使用此代码:

    func sampleCase() {
    var dateConstructor = DateComponents()
    dateConstructor.year = 2016
    dateConstructor.month = 12
    dateConstructor.day = 15
    let calendar: Calendar = Calendar.current
    let workCalendar = CalendarUtilities.calendar("WorkSchedule", using: eventStore)
    let referenceDate = calendar.date(from: dateConstructor)!
        let startDate = referenceDate
        let endDate = referenceDate.addingDays(1)  // midnight
        let range = DateRange(start: startDate, andEnd: endDate)
    let predicate = eventStore.predicateForEvents(withStart: range.startDate, end:range.endDate, calendars:[workCalendar])
    let events = eventStore.events(matching: predicate)
    print("Found: \(events.count) events")
    print("used:\(startDate)")
    print("\(endDate)")

}

我只获得上个月事件的正确结果...(这些示例使用具有事件的日期,并应返回非零值。)

  

授权被授予......
  找到:1个事件
  二手:2016-12-15 05:00:00 +0000
  2016-12-16 05:00:00 +0000

早些时候返回会导致0个事件。 我也尝试使用类似结果的枚举:

        eventStore.enumerateEvents(matching: predicate) { (result, stop) in
        counter += 1
    }
    print("found \(counter) items using iterator")
  使用时间:2016-11-11 05:00:00 +0000
  2016-11-12 05:00:00 +0000
  使用iterator找到0项

是否可以从2014年检索事件?我在使用日历应用程序(macOS和iOS)时看到它们。

2 个答案:

答案 0 :(得分:1)

我认为发生的事情是我的设备上的设置在iOS升级过程中发生了变化(我不知道如何)。在“设置/日历”中您可以指定事件的同步方式。我发现它被设置为" 1个月"。我现在能够检索超过1个月的事件。

答案 1 :(得分:0)

事件存储应返回与您提供的谓词匹配的任何内容,只要您不会使范围过大(有限制,我必须查找它)。在您的示例中,您只是告诉它在1天的范围内进行搜索。您还要将其缩小到一个特定的日历(您可以传递nil来搜索所有日历)。如果你想要2014年的活动,那么请在2014年给它一个范围。