2015-06-30 4 views
1

Будет ли работать NSFetchedResultsController, если свойство объекта, которое оно наблюдает, изменяется?Сфера применения NSFetchedResultsController

Например, я создал NSFetchedResultsController для класса под названием conversation. Теперь этот conversation может иметь массив messages. Допустимые операции над этим свойством messages Чтение/Непрочитано или удалено.

Так на каком-то этапе, если я удалю сообщение или пометить один, как прочитать или обновить сообщение, будет состояние Conversation структуры пачкаются и мой оригинальный контроллер получить результаты вернуть обновленный conversation значение с помощью модифицированного messages?

ответ

1

Как уже указывалось, контроллер получаемых результатов не реагирует на изменения атрибутов отношений, отличных от объекта его основного запроса на выборку.

Одно из решений заключается в том, чтобы объект сообщения выдал свой собственный NSNotification через центр уведомлений после изменения атрибута и прослушал контроллер вида, содержащий выбранный контроллер результатов.

+0

Я догадываюсь, что до сих пор неясно ... Позвольте мне перефразировать это ... FRC (Разговор). 'Разговор' имеет упорядоченный набор' Message'. Для сообщения есть отдельный FRC. Когда я добавляю сообщение, FRC переходит в действие как для «беседы», так и «сообщений». Но когда я обновляю «сообщение», FRC for for Conversation отключается. Является ли это именно ожидаемым поведением из-за причины, которую вы изложили. – 0x6d6e

+0

* Является ли это именно ожидаемым поведением из-за причины, которую вы наметили [?] * Да. – Mundi

1

Если у вас есть массив messages, то да. Если messages - это отношения, то некоторые изменения будут вызывать обновления (добавление или удаление), а некоторые - нет (чтение или непрочитанное). Это связано с тем, что FRC отслеживает изменения в Conversation, а не в объекте Message.

Разница заключается в том, что Message не является сущностью, и вы используете массив, тогда messages на самом деле являются двоичным блоком данных, и любое изменение полностью находится на Conversation.

+0

Спасибо за отзыв Wain. Моя фактическая структура данных такова. Разговор - это класс, а Messages - NSOrderedSet (я полагаю, что подобное поведение похоже на Coredata, отличное от очевидных различий между массивом и множеством). Моя проблема в том, когда мои ** сообщения ** обновляются, отслеживание ** FRC-отслеживания ** не улавливает это. Если мой ** разговор ** обновляется путем добавления ** сообщения **, сообщения отслеживания FRC обновляются. Так вы бы предположили, проблема кроется в другом месте? – 0x6d6e

+0

Я имею в виду, что вы делаете так, как настроены мои FRC? Просто добавить сообщение - это отдельный объект, и он имеет отношение к 'convers' – 0x6d6e

+0

Итак, у вас на самом деле нет массива, у вас есть отношения. Мой ответ все еще описывает эту ситуацию. Вам нужно отслеживать изменения сообщений отдельно, возможно, с другим FRC ... – Wain

Смежные вопросы