Принудительное обновление NSFetchedResultsController при изменении количества ассоциаций - PullRequest
3 голосов
/ 05 октября 2010

У меня есть NSFetchedResultsController, который отображает список элементов в табличном представлении, включая количество связанных объектов.Когда объект добавляется для этой ассоциации (с использованием addXXXObject), никакие обратные вызовы не вызываются для уведомления моего контроллера об обновлении.

Как я могу получить уведомление об объекте, добавляемом в NSSet родительского объекта, или иным образомпринудительно обновить выбранный контроллер результатов?

Для ясности, в настоящее время я получаю счет с использованием parent.children.count, который может быть неоптимальным.Есть ли лучший способ сделать все это?По сути, это просто экран, похожий на приложение iPhone Mail, с папками, показывающими количество сообщений внутри.

1 Ответ

0 голосов
/ 15 августа 2011

Моя модель немного отличается, но ее легко перевести на вашу.
Я получил древовидную структуру:

  • Элемент
    • название
    • родитель (к одному)
  • Папка: Элемент
    • дети (ко-многим)
  • Файл: Элемент

Когда файл добавляется или удаляется, только первая папка в очереди получает уведомление об этом изменении. При изменении заголовка файла ни одна папка не будет уведомлена. Итак, что делать?
Я попытался переопределить -willChangeValueForKey: и -didChangeValueForKey: в моем классе Element.

- (void)willChangeValueForKey:(NSString *)key
{
    [super willChangeValueForKey:key];
    [self.parent willChangeValueForKey:@"children"];
}

- (void)didChangeValueForKey:(NSString *)key
{
    [super didChangeValueForKey:key];
    [self.parent didChangeValueForKey:@"children"];
}

По сути, это заставляет родительскую папку обновляться, поскольку один из ее дочерних элементов изменился.
Надеюсь, это работает и для вас.

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