Я пытался решить загадку за последние несколько дней, почему мой NSFetchedResultsController с размером партии 20 всегда будет ошибочным (то есть загружать в память) все мои объекты немедленно когда выборка завершена, в результате чего запрос займет ~ 20 секунд.Динамическая высота UITableView с объектами Core Data
Оказалось, что это произошло из-за того, что в моем heightForRowAtIndexPath высота основывалась на длине свойства NSString каждого выбранного объекта и, таким образом, при перезагрузке таблицы, если таблица имеет 2000 строк, тогда вычисляется высота для каждой строки в начале, и поскольку я получаю доступ к текстовому свойству объекта, он будет ошибочным в 2000 объектах (в 20 партиях размеров) в самом начале, заставляя его принимать навсегда. (Я не знал, что высоты строк были рассчитаны все в начале).
Итак, вопрос заключается в том, что если у меня есть контролер результатов выборки с размером партии 20, но мои высоты строк основаны на текстовом свойстве объекта, который, если я попытаюсь получить доступ, приведет к тому, что объект не будет ошибка больше, но на самом деле загружена в память, что будет обходным путем для расчета высоты?
Какие у меня варианты?
Что произойдет, если вы проверите, является ли объект ошибкой, если он есть, верните произвольный размер, в противном случае получите строку и вычислите? Повторяется ли метод, когда ячейка входит в просмотр? Я просто догадываюсь. Это или реализация ленивой загрузки (некоторые новые строки добавляются по мере прокрутки) кажутся вашими единственными опциями. – jrturton
Нет heightForRow вызывается только в начале перезагрузки и не вызывается каждый раз, когда появляется ячейка (например, cellForRow). Это то, о чем я тоже думал, но я не думаю, что это сработает. – Snowman
Думал, что это звучит слишком просто. – jrturton