Ускорьте загрузку EKEvents - PullRequest
3 голосов
/ 04 ноября 2011

в моем приложении я отображаю список событий EKEvents и хочу отобразить все события месяца в UITableView, каждый раздел содержит соответствующие дни. Ну, это работает, и я получаю все данные, которые мне нужны, но выборка очень медленная.

Проблема заключается в событиях, которые распространяются на несколько дней.

  • Допустим, я уезжаю в отпуск с 10 ноября по 17 ноября.
  • Мой предикат поиска имеет дату начала с 1 ноября и дату окончания с 30 ноября.
  • Я делаю enumerateEventsMatchingPredicate или eventsMatchingPredicate, что угодно, оба медленные.

В ответ я получаю массив со всеми событиями, происходящими в ноябре, а также с моими каникулами. Но мой отпуск - только один объект EKEvent. Поэтому, если я хочу отображать ежемесячный список событий, он будет отображаться только один раз, 10 ноября, но для ясности я буду показывать его каждый день, 10, 11, ... 17-го.

Итак, что я делаю, так это перебираю каждый день месяца и делаю выборку: - / Таким образом, я получаю правильное количество событий, которые происходят в определенный день, но ... это так сложно.

Я уже поместил выборку в dispatch_async, поэтому выборка не блокирует пользовательский интерфейс, и после завершения выборки tableView перезагружается и ячейки перерисовываются. Но это все еще требует времени. Нет удобного времени.

Как вы выполняете эти поиски? У вас есть какие-либо советы о том, как ускорить поиск, возможно, небольшой фрагмент кода или вы можете указать мне правильное направление!?

Мой вопрос понятен? : - /

Спасибо, -Martin.

1 Ответ

0 голосов
/ 01 декабря 2011

Выборки выполняются медленно, особенно если много повторяющихся событий. То, что я сделал в своем приложении, - это выборка только один раз и обработка событий целый день-несколько-охватывающих-дней на куски. Я абстрагировал события: я создаю класс «date», у которого есть свойства NSString, используемые в качестве заголовков разделов в табличном представлении, и один из его ivars - это массив с соответствующими «events». «события» - это не EKEvents, а мой класс, в который я копирую необходимые свойства из EKEvents. Из нескольких дней, охватывающих один целый день EKEvent, я создаю соответствующие «события». Разбор довольно быстрый - замедление происходит при получении свойств из извлекаемых повторяющихся событий EKEvents.

...