Есть несколько способов сделать это.
Наблюдатель KVO
Ваша группа BlogGroup может наблюдать за изменениями в свойстве объекта Blog -numberUnreadPosts
и при его изменении может обновляться самостоятельно.
Аналогично, ваш блог может следить за изменениями свойства сущности Post -hasBeenRead
и, когда он изменяется, он может обновляться, что будет распространяться вплоть до BlogGroup.
Проблема с этим дизайномчто предполагается, что сущности BlogGroup и Blog находятся в памяти (поскольку вы включили бы наблюдателя в методе -awakeFromFetch
).Это может не всегда иметь место, и я считаю, что лучше не полагаться на эту ситуацию.
Распространение обновления
Когда сообщение изменяет свойство -hasBeenRead
, вы можете переопределить установщик и получитьэто называют его родителем (Блог) и говорят это об изменении.Затем блог обновит свой непрочитанный счетчик и сообщит блоггруппе, что он обновился.
Этот дизайн гораздо более последовательный и вряд ли потерпит неудачу.Однако это может иметь непредвиденные последствия из-за пульсации.Когда вы изменяете сообщение, в память загружается несколько объектов, которые нужно обновить.
Или не беспокойтесь об этом
Третий вариант заключается в том, что значение имеет только сообщение.Затем вы можете создать удобный метод как для Blog, так и для BlogGroup, который просто подсчитывает непрочитанные из объектов ниже.
Это довольно просто сделать, но это не наблюдаемое свойство, поэтому может не работать в вашем дизайне..
Дизайн вашего приложения определит, какой дизайн вам больше подходит.Если вы знаете, что BlogGroup и Blog всегда будут реализованы, когда вы работаете с сообщением, тогда вариант 1 - лучшее решение imho.