UITableView с NSFetchedResultsController reloadData, но не перемещает ячейку

У меня есть UITableView с NSFetchedResultsController.

Когда контроллер уходит с экрана, я следую предложению уйти в отставку как полученный делегат контроллера. Поэтому я полностью полагаюсь на контекстное уведомление и reloadData.

По сути, я анализирую уведомление и устанавливаю флаг needsReload = YES, когда во вставленном / обновленном / удаленном объекте есть соответствующая сущность и свойство для таблицы. В viewWillAppear я проверяю эту переменную и вызываю reloadData.

Однако NSFetchedResultsController имеет порядок сортировки по атрибуту NSManagedObject «pname».

Когда в другом контроллере представления я обновляю pname, скажем, с 0name до Zname, я могу перехватить уведомление об изменении контекста, и таблица будет правильно перезагружена при следующем viewWillAppear.

Проблема в том, что я ожидал, что ячейка будет идти внизу из-за порядка сортировки, но вместо этого она остается обновленной вверху, я полагаю, потому что reloadData обновляет только видимую ячейку. Как я могу это решить?


person Leonardo    schedule 02.09.2012    source источник


Ответы (1)


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

Следовательно, после переназначения делегата необходимо позвонить

[self.fetchedResultsController performFetch:&error]

сначала а потом

[self.tableView reloadData];
person Martin R    schedule 02.09.2012
comment
Хорошо, спасибо, тогда мне нужно повторно отправить запрос. Что насчет проблем с производительностью, особенно с большим набором строк. А также, что вы думаете об отставке делегата за кадром. Я слышал, как многие предлагали это, но никто не задокументировал этот выбор. - person Leonardo; 02.09.2012
comment
@ Леонардо: У меня нет однозначного ответа на этот вопрос. Я бы рекомендовал протестировать оба варианта и профиль с инструментами. Вероятно, это зависит от количества изменений по сравнению с размером набора строк. - person Martin R; 02.09.2012