Базовые данные: задержка вызова endUpdates до viewWillAppear - PullRequest
1 голос
/ 07 июля 2011

У меня есть приложение Core Data с контроллером панели вкладок, которое отображает 2 контроллера представления. Если я добавлю что-то в контроллер представления первой вкладки, это должно отобразиться в ВК второй вкладки. Оба VC основаны на NSFetchedResultsController, который основан на том же самом объекте; единственное отличие состоит в том, что у каждого есть предикат, а у второго VC нет.

Это нормально работает для обычного шаблона, и когда данные добавляются из 1-го ВК, они мгновенно обновляются во 2-й вкладке с использованием controllerWillChangeContent и controllerDidChangeContent. Проблема заключается в том, что если пользователь добавляет или удаляет какие-либо строки в 1-ом ВК, когда пользователь заходит на 2-ю вкладку, он не видит, что строки вставлены или удалены оживленно ... все уже есть.

То, что я хотел бы сделать, в VC 2-й вкладки, это задержка вызова [self.tableView endUpdates] (которая вызывает анимированную вставку / удаление строк в таблице), пока пользователь фактически не перейдет на эту вкладку что VC viewWillAppear. Я пробовал это, но, похоже, не работает:

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
        tableviewUpdates = TRUE;
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    if (tableviewUpdates) {
        tableviewUpdates = FALSE;
        [self.tableView endUpdates];
    }
}

Это работает, если добавить по одной строке за раз, а затем перейти на 2-ю вкладку, но не если я добавлю несколько строк на 1-й вкладке, а затем переключусь. Любая помощь будет оценена.

1 Ответ

1 голос
/ 08 июля 2011

Вы работаете против цели NSFetchedResultsController, которая заключается в том, чтобы сделать автоматическое и простое обновление табличного представления.

Однако я уверен, что если вы переопределите все методы делегата FRC, вы можете заблокировать все автоматические обновления.

Возможно, вы захотите переосмыслить этот дизайн. Действительно ли пользователи ожидают увидеть изменения в одном представлении, воссозданном за секунду? Понимают ли они, что следят за перемоткой предыдущих изменений, или они интуитивно думают, что приложение что-то делает с их данными самостоятельно?

Стандартная грамматика пользовательского интерфейса учит пользователей ожидать, что одно изменение анимируется один раз, а затем просто отображается на стандартном дисплее. Я бы посоветовал вам тщательно протестировать этот дизайн с наивными пользователями, прежде чем развертывать такой нестандартный интерфейс.

...