У меня есть модель с отношением «многие ко многим» между следующими объектами:
Встреча> --- <Персона </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 запускаться после каждого обновления?