Динамическая высота UITableView с объектами Core Data

Последние несколько дней я пытался разгадать загадку, почему мой NSFetchedResultsController с размером пакета 20 всегда будет давать сбой (то есть загружать в память) все мои объекты сразу после завершения выборки, вызывая запрос займет ~ 20 секунд.

Оказывается, это потому, что в моем heightForRowAtIndexPath высота основывалась на длине свойства NSString каждого извлеченного объекта, и поэтому при перезагрузке таблицы, если в таблице 2000 строк, высота вычисляется для каждой строки в в начале, и так как я получаю доступ к текстовому свойству объекта, в самом начале он будет поврежден в 2000 объектах (в 20 пакетах размера), заставляя его работать вечно. (Я не знал, что высоты строк были рассчитаны все в начале).

Таким образом, вопрос в том, есть ли у меня контроллер результатов выборки с размером пакета 20, но моя высота строки основана на свойстве text объекта, которое, если я попытаюсь получить доступ, приведет к тому, что объект больше не будет ошибкой, но на самом деле загружается в память, что будет обходным путем для расчета высоты?

Какие у меня варианты?

2 ответа

Решение

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

Мябе могут быть и другие ценные решения.

Создайте статический метод в вашем классе контроллера представления, который отвечает за вычисление указанной высоты. Все, что вам нужно для предоставления этой функции - это строка NSString, и она должна возвращать легко вычисляемый CGFloat. Используйте этот метод для возврата необходимой высоты ваших элементов без их создания (все, что вам здесь нужно, это метаданные их текста).

Другие вопросы по тегам