Как получить события старше 3 лет из EKEventStore

Я только что запустил следующий код (на своем iPhone):

  let predicate = eventStore.predicateForEvents(withStart: Date(timeIntervalSinceNow: -60*60*24*365*4), end: Date(timeIntervalSinceNow: 60*60*24*30), calendars: [calendar])

Результаты показывают, что этот запрос восходит всего 3 года назад:

самая ранняя найденная дата начала: 2015-04-11 12:00:00 +0000

Есть ли способ получить события календаря старше трех лет? Я хочу восстановить свои старые заметки о занятиях. Когда я использую календарь на Mac, он перечисляет количество для каждого календаря, но я не могу получить более старые объекты.


person Mozahler    schedule 16.03.2018    source источник


Ответы (1)


** Обновленный ответ **

Я немного покопался в этом и нашел от Apple, который объясняет, почему у ОП возникла эта проблема:

Из соображений производительности этот метод сопоставляет только те события, которые произошли в течение четырехлетнего промежутка времени. Если диапазон дат между startDate и endDate превышает четыре года, он сокращается до первых четырех лет.

С учетом сказанного вы можете просто создать четырехлетнее приращение со следующим кодом в качестве примера:

if let fourYearsAgo = Calendar.current.date(byAdding: .year, value: -4, to: Date()) {
    let predicate = eventStore.predicateForEvents(withStart: fourYearsAgo,
                                                  end: Date(),
                                                  calendars: [calendar])
}
person CodeBender    schedule 16.03.2018
comment
Спасибо! Я также получаю более старые события, когда я сужаю временной интервал события предиката. Я думаю, я просто буду использовать разные подходы, пока не буду удовлетворен тем, что у меня есть большинство/все данные, которые я ожидаю. - person Mozahler; 16.03.2018
comment
@Mozahler Обновлен информацией от Apple, которая объясняет, почему это происходит. - person CodeBender; 18.03.2018
comment
Но я возвращаю только 3, а не запрошенные 4. При условии, что мой запрос охватывает 4 года и месяц. В любом случае, спасибо за ваши усилия. Я рад, что ты нашел время, чтобы вернуться ко мне. - person Mozahler; 18.03.2018