1

비교적 복잡한 코어 데이터 관계 구조가 있는데 값 의존성 (또는 관측)을 설정하는 방법을 파악하려고합니다. 다양한 일대 다 관계. 기본적인 정보로 시작하겠습니다. 학생, 과제 및 성적 (학생 X 과제)이 포함 된 강의실이 있습니다. 간단히하기 위해 우리는 아직 과제에 많은 것을 집중할 필요가 없습니다.일시적인 코어 데이터 속성에 대한 "대다수"관계 값 종속성 설정

StudentObj <--->> ScoreObj <<---> AssignmentObj 

ScoreObjStudentObjAssignmentObj와 일대일 관계를 갖는다.

  • ScoreObj에는 숫자 등급, turnInDate 및 노트에 대한 실제 속성이 있습니다.

AssignmentObj.scores는 해당 과제 (N = 모든 학생)에 대한 점수 개체 집합입니다.

  • AssignmentObj에는 이름, dueDate, curveFunction, gradeWeight 및 maxPoints에 대한 실제 속성이 있습니다.

StudentObj.scores는 해당 학생의 점수 개체 집합입니다 (N = 모든 과제).

  • StudentObj도 등 이름, studentID, 이메일과 같은 실제 속성이
  • StudentObj이 gradeTotal라는 과도 (계산하지 저장) 속성이 있습니다.

이 마지막 항목 인 gradeTotal이 실제 피클입니다. 모든 과제, 점수, 곡선, 최대 점수 등의 점수 (ScoreObj)를 사용하여 학생의 전반적인 학년을 계산합니다.

gradeTotal 등급은 전체 학생과 개별 과제 성적과 함께 표의 열에 표시됩니다. gradeTotal의 값을 결정하는 것은 비교적 큰 값인이 특히 비싸기 때문에 입니다. 따라서 필요한 경우에만 실행하고 싶습니다. 단순함을 위해 핵심 데이터 모델에서 해당 등급의 총 가치를 저장하지 않습니다. 나는 그것을 어딘가에 캐싱하는 것을 꺼리지 만, 캐시를 가장 잘 업데이트 할 수있는 곳과 방법을 결정하는 시간을 갖고있다.

각 학생의 gradeTotal에 영향을주는 값이 변경 될 때마다 해당 계산을 실행해야합니다. 이것이 단순한 to-one 관계라면, 나는 과 같은 것을 사용할 수 있음을 안다. keyPathsForValuesAffectingGradeTotal ... 그러나 many-to-one-to-many 관계와 비슷하다. 누구든지 우아한 (그리고 KVC 올바른) 솔루션을 알고 있습니까? 나는 모든 점수와 과제물을 찢어 내고 학생을 관찰자로 등록하라고 말할 수 있습니다. 그러나 이것은 둔기력 접근법처럼 보입니다.

답변

2

난 그냥 아마이 프로젝트에 대한 자세한 설명은이 찾을 수 있습니다

http://github.com/mbrugger/CoreDataDependentProperties

observings

와 함께 문제의 일부를 해결 GitHub의에서 프로젝트를 postet.

- keyPathsForValuesAffecting가 저장되지 않은 (당신의 상황 "더러운"만드는대로, 종속 속성 과도해서는 안 또한 일대일 관계

에 걸쳐이 유일한 작품으로 문제를 해결하지 않았을 (NSArray를 *) 변경) 이미로드 후 모든 값을 다시 계산한 후

+0

나는이 접근 방식을 좋아한다. 이전에 구현 한 관찰 결과의 쥐의 둥지보다 훨씬 더 우아합니다. –

관련 문제