2011-04-21 3 views
0

코어 데이터를 사용하여 문서 기반 프로젝트를 만들고 있으며, 개념적 문제 일 수 있습니다. 코코아에 익숙하지는 않지만, 이것은 Core Data를 활용하려는 나의 첫 번째 시도입니다. 내가 성취하고자하는 것은 상대적으로 간단해야합니다. 각각의 새 문서가 출시 될 때마다 "루트"객체로 사용되는 모델 객체 중 하나의 인스턴스가 새로 생성되기를 바랍니다.핵심 데이터 : 문서 기반 응용 프로그램에서 "루트 개체"인스턴스화

내가 한 일은 NSObjectController를 내 xib에 추가하고 해당 엔티티 이름을 제공된 엔티티 이름으로 설정하고 "내용 준비"를 선택하고 관리 객체 컨텍스트를 managedObjectContext를 사용하여 File 's Owner에 바인딩하는 것입니다. 모델 키 패스 이를 테스트하기 위해 메인 윈도우의 제목을 객체 컨트롤러의 컨트롤러 키와 선택 항목으로 모델 키 경로를 내 엔터티의 키 중 하나로 묶었습니다.

루트 객체를 프로그래밍 방식으로 만들 수 있지만 Apple에서 권장하는 조정자 패턴을 채택하려고합니다. 나는 "중재자 패턴 채택"부분에서 부서 직원 지침서의 지침을 보았고 자세한 단계는 정확하게 내가 한 것으로 믿는다.

의견이 있으십니까?

편집 : 아마도이 문제를 올바르게 언급하지 않았습니다. 모델은 핵심 데이터에서 만들어지며 관계는 ("루트", 자식 및 잎, 1 대 부모 관계, 다수 자식 관계 및 isLeaf 부울 특성을 사용하여) 필요한대로 설정됩니다. 내 문제는이 루트 개체가 새 문서가 시작될 때마다 싱글 톤으로 인스턴스화되는지 확인하는 것입니다. 루트 객체와 현재 문서 사이에는 정확히 1 : 1의 관계가 있어야하며, 루트 객체는 사용자 상호 작용없이 항상 존재하고 사용할 수 있어야 생성 할 수 있으며 루트에 생성되고 연결된 자식 노드는 데이터 객체입니다 응용 프로그램에서 사용하고 조작합니다.

위의 기능을 프로그래밍 방식으로 구현했지만 핵심 데이터 원칙에 따라 조정자 패턴을 완전히 채택하고 응용 프로그램 논리 내에서 데이터 개체 생성을 관리하지 않으려합니다.

답변

0

링크 된 목록이나 트리에서 찾을 수있는 것처럼 "루트"관리 대상 개체를 원하면 데이터 모델 자체에서 설정해야합니다.

기본적으로 핵심 데이터 데이터 모델에는 개체 사이에 특정 계층이 없습니다. 객체가 관련 될 수 있지만 객체가 논리적으로 다른 객체의 위 또는 아래에 있지는 않습니다. 다른 객체로 시작하여 관계를 원하는 객체로 다시 이동하여 어떤 관계의 객체로도 접근 할 수 있습니다.

관리되는 개체의 계층 구조는 다음과 같은 구조 같은 트리를 필요 :

Tree{ 
    nodeName:string 
    parent<-->>Tree.children 
    children<<-->Tree.parent 
} 

을 ... "루트"개체가 parent==nil을 가지고있는 유일한 Tree 인스턴스가되도록.

는, 당신이 참조하는 애플의 워드 프로세서가은 대부분의 경우 계층 구조에서 내장의이 유형을 사용하지 최고라고 말할 것을 지적하는 모든이를 가졌어요. 데모 용으로 단순화 한 것입니다. 나쁜 생각입니다.

데이터 모델은 실제 응용 프로그램이 처리하는 실제 개체, 조건 또는 이벤트를 모델링/시뮬레이트하기위한 것입니다. 따라서 모델/그래프에서 개체/개체 간의 논리적 관계는 실제 관계를 반영해야합니다.이 경우 실제로 모델링하는 실제 물건이 실제 "루트"객체, 조건 또는 이벤트가있는 계층 구조에 존재하지 않으면 모델에 하나의 모델이 없어야합니다.

+0

실제로 트리 계층 구조는이 특정 프로젝트에 적용 할 수있는 실제 모델을 반영합니다. – kcalvelli

+0

맞는 경우, 예제에 표시되거나 다른 API에서 사용될 수 있기 때문에 트리 구조를 사용하지 않도록주의해야합니다. – TechZen

관련 문제