活动套件的多日全天活动不在日历之上

时间:2016-06-29 07:22:04

标签: ios swift eventkit

在Event Kit中跨越多天的全天事件显示在当天事件列表的底部。

例如,如果我从1月1日到1月3日有一整天的全日活动,那么请查看1月2日的日历。

1月2日

  • 8-10am会议
  • 中午12点 - 下午1点午餐
  • 全天活动*

代码

    let startDate = NSCalendar.currentCalendar().startOfDayForDate(Dates.dateObject)
    let endDate = startDate.dateByAddingTimeInterval(Double((60 * 60 * 24))

    let calendars = eventStore.calendarsForEntityType(.Event)
    var selectedCalendars = [EKCalendar]()

    for cal in calendars {
        if (NSUserDefaults.standardUserDefaults().boolForKey(cal.calendarIdentifier) != false) {
            selectedCalendars.append(cal)
        }
    }

    let eventsPredicate = eventStore.predicateForEventsWithStartDate(startDate, endDate: endDate, calendars: selectedCalendars)

    events = eventStore.eventsMatchingPredicate(eventsPredicate)

1 个答案:

答案 0 :(得分:1)

要解决此问题,谓词的开始日期和结束日期必须为00:00:00到23:59:59(而不是00:00:00到00:00:00)。

代码修改如下。

    let startDate = NSCalendar.currentCalendar().startOfDayForDate(Dates.dateObject)
let endDate = startDate.dateByAddingTimeInterval(Double(((60 * 60 * 24) - 1))

let calendars = eventStore.calendarsForEntityType(.Event)
var selectedCalendars = [EKCalendar]()

for cal in calendars {
    if (NSUserDefaults.standardUserDefaults().boolForKey(cal.calendarIdentifier) != false) {
        selectedCalendars.append(cal)
    }
}

let eventsPredicate = eventStore.predicateForEventsWithStartDate(startDate, endDate: endDate, calendars: selectedCalendars)

events = eventStore.eventsMatchingPredicate(eventsPredicate)