У меня относительно сложная структура отношений Core Data, и я пытаюсь выяснить, как установить зависимости (или наблюдения) значений между различными отношениями ко-многим. Позвольте мне начать с некоторой базовой информации. У меня есть класс с учениками, заданиями и оценками (ученики X заданий). Ради простоты, нам пока не нужно особо концентрироваться на заданиях.
StudentObj <--->> ScoreObj <<---> AssignmentObj
Каждый ScoreObj имеет отношение «один к одному» с StudentObj и AssignmentObj .
- ScoreObj имеет реальные атрибуты для числовой оценки, turnInDate и примечаний.
AssignmentObj.scores - набор объектов Score для этого задания (N = все учащиеся).
- У AssignmentObj есть реальные атрибуты для name, dueDate, curveFunction, gradeWeight и maxPoints.
StudentObj.scores - набор объектов Score для этого учащегося (N = все задания).
- StudentObj также имеет реальные атрибуты, такие как имя, studentID, адрес электронной почты и т. Д.
- StudentObj имеет переходный (вычисленный, не сохраненный) атрибут с именем gradeTotal .
Этот последний предмет, gradeTotal, - настоящий рассол. он вычисляет общую оценку за семестр учащегося, используя оценки (ScoreObj) из всех своих заданий, связанных с ними заданий оценочных весов, кривых и максимальных баллов и других различных вещей.
Это значение gradeTotal отображается в столбце таблицы вместе со всеми оценками учащихся и их индивидуальными заданиями. Определение значения gradeTotal является относительно дорогой операцией, особенно для большого класса, поэтому я хочу запускать ее только при необходимости. Для простоты я не храню это значение gradeTotal в базовой модели данных. Я не против кэшировать его где-то, но у меня немного времени, чтобы определить, где и как лучше обновить этот кеш.
Мне нужно запускать этот расчет для каждого учащегося всякий раз, когда изменяется любое значение, влияющее на его оценку. Если бы это были простые отношения один к одному, я знаю, что мог бы использовать что-то вроде keyPathsForValuesAffectingGradeTotal ... но это больше похоже на отношение многие-к-одному-ко-многим. Кто-нибудь знает элегантное (и правильное KVC) решение? Я предполагаю, что смогу прорваться через все эти объекты оценки и задания и сказать им, чтобы они зарегистрировали своих студентов в качестве наблюдателей. Но это похоже на тупой подход.