NSFetchedResultsController пытается ограничить количество отображаемых записей

При создании NSFetchRequest для перехода к моему NSFetchedResultsController я устанавливаю свойство fetchLimit равным 3.

Теперь изначально это работает нормально. Я могу изменить первые три возвращенных объекта любым способом, который изменяет их порядок, и все они правильно перетасовываются. Проблема возникает, когда я либо изменяю объект, который первоначально падал за первые три, таким образом, который теперь переносит его в первые три, или просто добавляя новый объект, чтобы он появлялся в течение первых трех.

То, что я ожидал, произойдет: вложенный объект подталкивает остальных вниз, а один падает снизу.

Что на самом деле происходит: вложенный объект подталкивает остальных вниз, а количество записей увеличивается до 4 ?!

Может ли кто-нибудь объяснить это, или как я должен справиться с этим?

One Solution collect form web for “NSFetchedResultsController пытается ограничить количество отображаемых записей”

Я немного поработал над этим, в основном проигнорировав numberOfObjects и вернув фактическую длину, я хочу, чтобы таблица была исправлена. Это требует немного обмана в controller:didChangeObject:... но, похоже, работает до сих пор.

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return kTableSize; //return [[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects]; } - (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath { UITableView *tableView = self.myTableView; switch(type) { case NSFetchedResultsChangeInsert: // Only modify table if insert will effect visible rows if (newIndexPath.row < kTableSize) { // Delete last row to maintain fixed length [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:(kTableSize - 1) inSection:newIndexPath.section]] withRowAnimation:UITableViewRowAnimationAutomatic]; [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; } break; case NSFetchedResultsChangeDelete: // Only modify table if delete will effect visible rows if (indexPath.row < kTableSize) { [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; // Insert extra row to maintain fixed length [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:(kTableSize - 1) inSection:newIndexPath.section]] withRowAnimation:UITableViewRowAnimationAutomatic]; } break; case NSFetchedResultsChangeUpdate: // Only modify table if update will effect visible rows if (indexPath.row < kTableSize) { [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; } break; case NSFetchedResultsChangeMove: // Only modify table if move will effect visible rows if ((indexPath.row < kTableSize) || (newIndexPath.row < kTableSize)) { // Delete old row or last row of table if (indexPath.row < kTableSize) { [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; } else { [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:(kTableSize - 1) inSection:newIndexPath.section]] withRowAnimation:UITableViewRowAnimationAutomatic]; } // Insert new row or a row at bottom of table if (newIndexPath.row < kTableSize) { [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; } else { [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:(kTableSize - 1) inSection:newIndexPath.section]] withRowAnimation:UITableViewRowAnimationAutomatic]; } } break; } } 

Также необходимо позаботиться в tableView:cellForRowAtIndexPath: чтобы мы не пытались получить доступ к объекту, который не существует, если объектов меньше, чем длина таблицы.

  • выборка любых данных, содержащих данные ядра ID
  • Я ошибся, когда получил данные из NSManagedObjectContext
  • Могут ли два объекта CoreData иметь более одного отношения «ко многим» между ними?
  • Повысить скорость обновления существующих записей (~ 11 000) в базовых данных
  • Не найден объект в coredata после добавления в отношения
  • Есть ли более быстрый способ получить конкретный объект управления в Core Data, чем запрос на выборку?
  • Сложная сортировка для запроса выборки ядра
  • Форма NSPredicate из строки, содержащей идентификаторы
  • NSFetchRequest для вспомогательных объектов в строках
  • NSFetchedResultsController несколько объектов для UITableView
  • NSFetchRequest не работает с предикатом
  • Interesting Posts

    Как я могу перебирать все элементы в NSMapTable в Swift

    iOS JSON Parse не работает (возвращает нулевой словарь)

    Возможно автоматическое обновление корпоративного приложения во время работы в режиме управляемого доступа?

    Форматирование текста UITextField как номера телефона в качестве типов пользователей в

    Сгенерировать полный список путей кодирования ключа для вложенных NSDictionary?

    Откройте UISplitViewController для просмотра мастера, а не детали

    iPhone скрывает панель навигации только на первой странице

    приложение с добавлением времени: openURL не срабатывает

    Cordova, Phonegap и ионный (значок отсутствует 1024×1024)

    Загрузка изображений SDWebImage

    Как обеспечить, чтобы приложение iOS получало EVERY push-уведомление, отправляемое сервером?

    Получен код состояния = 11 при уведомлении APNS

    iOS PNG Изображение повернуто на 90 градусов

    UISearchDisplayController устарел в iOS 8, но существует в библиотеке объектов Xcode

    Как popToRoot на одной вкладке, когда пользователь находится на другой вкладке?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.