Swift 4.2 EventKit получает все события в выбранный календарь на TableView didSelectedRowAt - PullRequest
0 голосов
/ 20 марта 2019

Я загружаю все свои календари в виде таблицы, где каждый календарь представлен в ячейке.Теперь я хочу напечатать все события календаря ячейки, когда я нажимаю на ячейку.Проблема в том, что с помощью кода, который вы видите, я получаю события всех календарей.

Как я могу сказать функции только смотреть в календаре, который я нажал в табличном представлении?

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let calendarTitle = calendars![indexPath.row].title
    print(calendarTitle)
    let calendar = Calendar.current
    print("Current \(calendar)")

    var oneDayAgoComponents = DateComponents()
    oneDayAgoComponents.day = -1
    let oneDayAgo = calendar.date(byAdding: oneDayAgoComponents, to: Date())

    var oneDayFromNowComponents = DateComponents()
    oneDayFromNowComponents.day = 7
    let oneDayFromNow = calendar.date(byAdding: oneDayFromNowComponents, to: Date())

    var predicate: NSPredicate? = nil
    if let anAgo = oneDayAgo, let aNow = oneDayFromNow {
        predicate = eventStore.predicateForEvents(withStart: anAgo, end: aNow, calendars: nil)

    }

    var events: [EKEvent]? = nil
    if let aPredicate = predicate {
        events = eventStore.events(matching: aPredicate)

        for event in events! {
            print(event.title)
        }
    }
}

1 Ответ

1 голос
/ 20 марта 2019

Вы должны передать календарь в параметре calendars predicateForEvents

let rowCalendar = calendars![indexPath.row]
let calendarTitle = rowCalendar.title
print(calendarTitle)

...

if let anAgo = oneDayAgo, let aNow = oneDayFromNow {
    predicate = eventStore.predicateForEvents(withStart: anAgo, end: aNow, calendars: [rowCalendar])
}

И, пожалуйста, объявите массив источника данных как необязательный пустой массив, так как вы все равно его принудительно разворачиваете

var calendars = [EKCalendar]()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...