2

내 자신 만의 바인딩 가능한 사용자 정의 트리 뷰를 생성합니다. 이를 위해 NSTreeController에서 항목의 일대 다 관계에 대한 업데이트를 관찰하고 싶습니다. NSTreeController는 CD 관리 객체 컨텍스트에 바인딩됩니다. 모든 깊이 수준에는 부모/자식/isLeaf 속성이있는 고유 한 CD 엔터티가 있습니다. 나는보기에 동일한 계층 구조를 유지할 필요가있다. 무언가가 삽입되면 children 속성을 관찰하기 시작합니다. 그리고 새로 삽입 된 객체에 대한 indexpath를 알아야합니다.삽입/제거를 위해 NSTreeController의 바운드 CoreData 엔티티 관찰

삽입/제거 된 항목을 정확히 알고 싶습니다. 따라서 해당 항목의 삽입/삭제를 관찰 할 수 있습니다. 내가 이해할 수있는 표준 방법은 observeValue : forKey ... 내부의 "변경"NSDictionary를 조사하지만 변경 사항은 NULL입니다.

나는 이것이 오랜 시간의 버그라는 것을 알고 있지만 그것에 대한 좋은 해결책이 있습니까? 일부 예제의 뷰는 배열을 저장하고 모델이 변경되면 차이점을 비교하는 것을 보았습니다. 그것의 더 복잡한 treeview. 또한이 방법은 메모리 및 CPU주기를 낭비합니다. 테스트 할 해결 방법이 하나 있습니다. 그것은 단지 일종의 작품이므로 아직 설명하지 않겠습니다.

+0

혹시 이것에 대한 적절한 해결책을 생각해 냈습니까? 나는 많은 문제를 겪고있다. –

답변

1

NSTreeController를 서브 클래스 화하고 삽입/제거 메소드를 구현하는 것은 어떻습니까? 예를 들면 이런 것.

- (void)insertObject:(id)object atArrangedObjectIndexPath:(NSIndexPath *)indexPath { 

     // ... code to update your object relationships .. 
     // ... Take care here if you update any variables in your model (eg a sortindex) that would trigger KVO in the NSTreeController. In those case you need to make the updates without triggering KVO by using setPrimitiveValue:forKey or get an infinite loop 

     [super insertObject:object atArrangedObjectIndexPath:indexPath]; 

} 
관련 문제