NSFetchedResultsController - когда запускаются методы делегата? - PullRequest
0 голосов
/ 26 сентября 2011

У меня есть модель с отношением «многие ко многим» между следующими объектами:

Встреча> --- <Персона </p>

Я использую NSFetchedResultsController, чтобы вернуть вселюди для встречи (они отображаются в пользовательском представлении).NSFetchRequest создан так:

NSSortDescriptor * lastNameSort = [NSSortDescriptor sortDescriptorWithKey: @"lastName" ascending: YES];
NSSortDescriptor * firstNameSort = [NSSortDescriptor sortDescriptorWithKey: @"firstName" ascending: YES];

request.entity = [NSEntityDescription entityForName: @"Person" inManagedObjectContext: context];
request.predicate = [NSPredicate predicateWithFormat: @"(ANY %K == %@)", @"meetings", self];
request.sortDescriptors = [NSArray arrayWithObjects: lastNameSort, firstNameSort, nil];

Вызов -[Meeting addPeopleObject:] для одного человека работает нормально - методы делегата для NSFetchedResultsController запускаются правильно, и я могу обновить пользовательское представление.

У меня проблема с добавлением нескольких людей на собрание.Метод проходит через множество людей, вызывая -[Meeting addPeopleObject:] для каждого человека.В первый раз, когда я делаю это, NSFetchedResultsControllerDelegate методы запускаются после добавления каждого человека.Поэтому, если я добавлю 5 человек, controllerWillChangeContent:, затем controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:, тогда controllerDidChangeContent: будет запущен 5 раз.

Если я создам второй объект Meeting и затем добавлю тех же 5 человек к этому совещанию, *Методы делегатов 1021 * и didChange запускаются только дважды, один раз после первого лица и один раз после последнего человека.Метод controller:didChangeObject:... вызывается 5 раз, как и ожидалось, но не в том порядке, в котором люди были вставлены.

Это ожидаемое поведение для NSFetchedResultsController?Есть ли какое-то кеширование, вызывающее это (NSFetchedResultsController был создан с нулевым кешем).Есть ли способ заставить методы NSFetchedResultsControllerDelegate запускаться после каждого обновления?

1 Ответ

1 голос
/ 26 сентября 2011

Уведомления не гарантированно отображаются в любом порядке, так что это не проблема.

Пока выполняется порядок вызовов willChange -> controller:didChangeObject: -> didChange, проблем не возникает, если все изменения происходят между willChange и didChange. * 1008. *

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

Вероятно, это одна из базовых данных закулисной оптимизации. Пока таблица обновляется правильно, я буду беспокоиться об этом.

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