2014-10-08 5 views
0

핵심 데이터 객체 그래프를 영역으로 이동하려고합니다.영역의 상위 - 하위 관계

현재 내가 부모 노드와 노드의 모든 자식을 저장할 수 있습니다

@NSManaged var children: NSSet 
@NSManaged var parentNode: DBNode 

있다 DBNode라는 법인을 보유하고 있습니다. 내가 RLMNode라는 영역 객체가있을 때

는 :

dynamic var children = RLMArray(objectClassName: RLMNode.className()) 
dynamic var parent = RLMNode() 

와 RLMObject을 먼저 개체를 추가하려고 할 때 충돌이 발생합니다.

영역에서이 계층 구조를 수행 할 수 있습니까?

편집 :

그것은 내가이 작업을 수행 할 수있는 것, 그리고 단지 배열에서 하나 개의 노드가 있습니다

dynamic var parent = RLMArray(objectClassName:RLMNode.className()) 

이 권장 방법이 될 것인가를? Core Data의 객체 그래프만큼 빠릅니까?

+0

문제를 더 잘 이해하기 위해 단지 두 가지 질문이 있습니다. 우선 부모와 다시 연결하는 목적은 무엇입니까? 그리고 왜 부모는 객체 링크가 아닌 배열입니까? – Gusutafu

+0

트리 계층에서 앞뒤로 이동할 수 있습니다. 부모 노드는 현재 노드의 부모 노드를 보유하고 자식 노드는 현재 노드의 모든 자식 노드 노드를 보유합니다. 핵심 데이터에서 부모는 배열이 아니지만 Realm에서 RLMArray를 초기화 할 필요가 없으며 아무 것도 할 수 없다는 것을 알았습니다. 따라서 실제로는 요구 사항 인 경우 Realm의 요구 사항을 해결할 수있는 해킹이었습니다. – Caroline

답변

2

크래시의 원인은 초기화가 재귀 적으로 발생한다는 것입니다. 노드를 만들면 부모 노드가 필요하며 노드 등이 필요합니다. 스택 추적을 확인하여 .

는 스위프트의 영역은 선택 개체 속성을 지원하고, 그들은 기본적으로 전무로 설정되어 있습니다, 그래서 당신은 다음과 같이 수행 할 수 있습니다

class DBNode: RLMObject { 
    dynamic var name = "" 
    dynamic var parent: DBNode? 
    dynamic var children = RLMArray(objectClassName: DBNode.className()) 
} 

배열 사실 하지가 nil이 될 수 있습니다, 그들은해야합니까 초기화 될 수 있지만 비어있을 수 있습니다.

오브젝트와 해당 부모 (또는 하위)를 모두 영역에 명시 적으로 추가하면 예외가 발생할 수 있으므로주의하십시오. 지속되지 않는 오브젝트에 연결할 수 없으므로 자동으로 추가됩니다.

+0

훌륭함 - 고마워요. 예, 재귀 적이었습니다. 부모가 추가 될 수 있다는 것을 알지 못했습니다. 렐름의 브라우저는 트리의 내용을 잘 보여줍니다. – Caroline

관련 문제