NSTreeController
에서 동적으로 업데이트 된 데이터를 가져 와서 정상적으로 작동합니다. 내가 할 수없는 일은 NSOutlineView에서 사용자 선택을 기반으로 거기에서 거꾸로 작업하는 것입니다.NSOutlineView에서 NSTreeController 데이터 가져 오기 선택
var deviceStore = [TreeNode]()
그것은 어린이 등 Service
객체의 배열을 포함 할 수있다) 또는 수도 없습니다) Device
객체의 배열입니다 실시간으로 업데이트되는 내 백업 데이터 저장소입니다.
이 모두 작동합니다. 그러나 Outline View에서 한 행을 선택할 때 back을 deviceStore의 원본 객체에 적용해야합니다. 또는 적어도 OutlineView에서 표시된 데이터를 가져와 deviceStore를 걸을 수 있습니다. ~에 원래 항목을 찾으십시오.
내가 선택한 것은 treeController.selectedNodes
을 통해 NSTreeController TreeNode를 추출 할 수 있지만 선택 항목을 만들 때 호출되는 func outlineViewSelectionDidChange(_ notification: Notification) {}
입니다.하지만 거기에서 나는 잡초에 속합니다. selectedNodes는 선택한 노드의 전체 배열이므로 자식 (리프) 노드 인 경우 상위 노드와 모든 형제를 포함합니다.
selectedNodes
배열은 다음과 같습니다
<NSTreeControllerTreeNode: 0x6080000c4590>, child nodes {
0:<NSTreeControllerTreeNode: 0x6000000ca6b0>, child nodes {
0:<NSTreeControllerTreeNode: 0x6000000caf70>, child nodes {}
1:<NSTreeControllerTreeNode: 0x6000000cafe0>, child nodes {}
2:<NSTreeControllerTreeNode: 0x6000000cb050>, child nodes {}
}
1:<NSTreeControllerTreeNode: 0x6080000d1790>, child nodes {
0:<NSTreeControllerTreeNode: 0x6000000cce80>, child nodes {}
}
}
그리고 selectedIndex의 내가 다시 연락하는 방법을 볼 수 없습니다 4.
입니다 내 데이터 모델에서이 정보로부터 deviceStore [0] .serviceStore [2]가 될 것입니다.
선택한 행에서 서비스 ID 열의 값을 검색 할 수 있으면 deviceStore 트리를 탐색하여 찾을 수 있습니다.
나는 아직 찾지 못했지만 간단하고 우아하고 쉬운 방법이 있다고 확신하지만 NSTreeController
초와 NSOutlineView
초를 잃었습니다.
감사를 다음 사용합니다. 'let selectedService = treeController.selectedObjects.first as? treeController.selectedObject가'Service' 객체가 아니고'Device' 객체도 아니기 때문에 Service는 훌륭하게 실패합니다. 사실, 두 객체는 모두 사용자 정의'TreeNode' 프로토콜을 사용 합니다만,'TreeNode' 객체조차 아닙니다. 실제로'ViewNode' 프로토콜을 구현하는'ViewController' 객체입니다. selectionIndexPath ** always **는 인덱스 경로 값 0을 반환합니다. 나는 이상하게 여기고 있습니다. – Davidgs
가능한 한 응답을 편집했습니다. 트리 컨트롤러가 올바른 개체를 "제공"하지 않는 이유에 대한 설명. –