Ускорьте загрузку EKEvents
В моем приложении я отображаю список событий EKEvents и хотел бы отобразить все события месяца в UITableView, каждый раздел содержит соответствующие дни. Ну, это работает, и я получаю все данные, которые мне нужны, но выборка очень медленная.
Проблема заключается в событиях, которые распространяются на несколько дней.
- Допустим, я собираюсь в отпуск с 10 ноября до 17 ноября.
- Мой предикат поиска имеет дату начала с 1 ноября и дату окончания с 30 ноября.
- Я делаю enumerateEventsMatchingPredicate или eventsMatchingPredicate, что угодно, оба медленные.
Я получаю массив взамен всех событий, происходящих в ноябре, а также мои каникулы. Но мой отпуск - только один объект EKEvent. Поэтому, если я хочу отображать ежемесячный список событий, он будет отображаться только один раз, 10 ноября, но для ясности я буду показывать его каждый день, 10, 11, ... 17-го.
Так что я делаю, повторяю каждый день месяца и делаю выборку:-/ Таким образом, я получаю правильное количество событий, которые происходят в определенный день, но... это кажется таким сложным.
Я уже поместил выборку в dispatch_async, чтобы выборка не блокировала пользовательский интерфейс, и после завершения выборки tableView перезагружается и ячейки перерисовываются. Но это все еще требует времени. Нет удобного времени.
Как вы выполняете эти поиски? Есть ли у вас какие-либо советы о том, как ускорить поиск, может быть, небольшой фрагмент кода или можете указать мне в правильном направлении!?
Мой вопрос понятен?:-/
Спасибо, Мартин.
1 ответ
Сборка происходит медленно, особенно если много повторяющихся событий. То, что я сделал в своем приложении, - это выборка только один раз и обработка событий целый день-несколько-охватывающий-день на куски. Я абстрагировал события: я создаю класс "date", который имеет свойства NSString, используемые в качестве заголовков разделов в табличном представлении, и один из его ivars - это массив с соответствующими "events". "события" - это не EKEvents, а мой класс, в который я копирую необходимые свойства из EKEvents. Из нескольких дней, охватывающих один целый день, EKEvent создаю соответствующие "события". Разбор довольно быстрый - замедление происходит при получении свойств из извлекаемых повторяющихся событий EKEvents.