Я заметил, что вставка данных с NSFetchedResultsController
в Core Data
обновит каждую ячейку в моем Table View
, используя метод tableView:cellForRowAtIndexPath:
.
Мое приложение запускается при получении более 100 элементов из веб-службы. Когда они добавляются в базу данных базовых данных, для каждой ячейки выполняется вызов tableView:cellForRowAtIndexPath:
. Я ожидаю, что обновятся только первые 8-9 видимых ячеек. Как я могу это изменить? Причина, по которой это является проблемой, заключается в том, что мое приложение загружает изображение обложки в первый раз, когда вызывается tableView:cellForRowAtIndexPath
- и когда оно вызывается для каждой ячейки, это не оптимальное решение.
EDIT1:
Мой код полностью основан на примере из курса CS 192p в Стэнфордском университете . Я скачал их Photomania.zip
из лекции 14 и просто вставил метод tableView:willDisplayCell:forRowAtIndexPath:
, который отображает имя элемента в журнале при вызове метода. Вы можете взять мой код здесь: http://uploads.demaweb.dk/Photomania.zip.
Как вы увидите, похоже, этот метод вызывается для каждого элемента в таблице? Почему?
EDIT2:
Я использовал этот метод в своем NSFetchedResultsControllerDelegate
из библиотеки разработчиков iOS. Я обнаружил, что withRowAnimation:UITableViewRowAnimationFade
заставляет его вызывать cellForRowAtIndexPath
и willDisplayCell
для каждой ячейки. При изменении значения на withRowAnimation:UITableViewRowAnimationNone
вызываются только видимые ячейки.
- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id<NSFetchedResultsSectionInfo>)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type {
switch(type) {
case NSFetchedResultsChangeInsert:
[self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeDelete:
[self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
break;
}
}