При переупорядочении UITableView NSFetchedResultsController не имеет последнего состояния - PullRequest
0 голосов
/ 14 февраля 2011

У меня UITableView питание от NSFetchedResultsController, и я пытаюсь правильно поддержать переупорядочение.

Внутри moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath Я отвечаю на переупорядочение путем обновления значения order на NSManagedObject s и сохраняю контекст следующим образом:

[self.fetchedResultsController.managedObjectContext save:nil];

Так что теперь все объекты имеют правильное значение order, и контроллер результатов NSFetchRequest сортирует по этому значению правильно.

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

  // ... cell generation code ...

  NSManagedObject *obj = [self.fetchedResultsController objectAtIndexPath:indexPath];
  [cell.textLabel setText:sideEffect.name];

}

Если я уйду, а затем вернусь, ячейки будут в правильном порядке.

После моего звонка на save мне нужно:

  • Обновить NSFetchedResultsController
  • сделать недействительным кеш
  • Обновить / сбросить что-то на UITableView?

1 Ответ

0 голосов
/ 14 февраля 2011

Решение состояло в том, чтобы повторно инициализировать контроллер выборки после изменения хода.Так как у меня был специальный метод получения, генерирующий контроллер (и выполняющий первую выборку), я мог просто установить переменную экземпляра на nil, чтобы в следующий раз он был восстановлен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...