3

사용자 정의 <NSOutlineViewDataSource>입니다. 은 selectionIndexPaths 속성을 업데이트합니다. 실제로 제대로 바인딩하려면 bind:toObject:withKeyPath:options:을 얻을 수 없습니다. 기본적으로 어떤 데이터가 선택되었는지 알기 위해서는 데이터 소스가 필요합니다.바인딩 NSOutlineView의 선택 인덱스 경로

selectionIndexes (NSTableView로 선언 됨) 또는 selectionIndexPaths (NSOutlineView에 의해 선언 됨)에 바인딩 할 때 설명서에 (내가 IB에서만 사용 가능한 이유가없는 한) 문서를 표시 할 때 런타임 예외가 발생합니다. 윤곽선보기는 해당 키 중 하나에 대해 "키 값 코딩 호환"이 아닙니다.

selectedRowIndexes에 바인드 할 때 (그 후 정보를 가져 와서 어떤 부모/자식 쌍이 선택되었는지 리버스 엔지니어링해야하므로) 데이터 소스를 NSIndexSet으로 한 번 업데이트합니다. 데이터 소스는 초기 값으로 고정됩니다. 나는 그것을 수동으로 설정하지도 않는다. 또한 selectedRowIndexes을 다른 방향으로 바인딩 할 수도 없기 때문에 데이터 소스는 개요보기의 선택을 업데이트 할 수 있습니다. 윤곽선보기에서 동일한 "키 값 코드 호환"예외가 발생합니다.

내 데이터 원본 클래스에 백업 ivar이 정의되어 있고 데이터가로드 된 후 데이터 소스 및 개요보기에 대한 참조가있는 컨트롤러 클래스에서 -awakeFromNib에 바인딩되어 있습니다.

답변

1

을 오히려 selectionIndexPaths 바인딩보다 신뢰성 없게 행동하는, 내가 대신 내 윤곽을 사용 보기의 위임자가 -outlineViewSelectionIsChanging:-outlineViewSelectionDidChange: 알림에서 모델의 선택 항목을 업데이트합니다.

2

Dov, 바인딩에 맞게 조정 된 NSTreeController를 사용 해본 적이 있습니까? 개요보기의 대리인이 방법에 선택의 알림을받을 수로 또는, 당신은 당신의 컨트롤러를 설정할 수 있습니다 "-outlineViewSelectionDidChange"

Source

+0

나는 이전에 NSTreeController를 사용했지만 더 많은 사용자 정의 된 동작을 원했습니다. 또한,'-outlineViewSelectionDidChange'는 사용자가 키보드 탐색이 아닌 새로운 행을 클릭 할 때만 시작됩니다. – Dov

+0

이것은 꽤 늦었지만 어쨌든 여기에 의견이 있습니다. 개요보기와 함께 사용자 지정보기를 구성하고 있습니다. 화살표 키는 선택 항목을 변경하는 데 적합합니다 (나를 위해). selectedIndex 세트에서 선택된 객체를 찾을 수도 있습니다. 다행히도 객체는 부모뿐만 아니라 자식도 알고 있으므로 색인 집합이 필요하면 계산하기 쉽습니다. 나는 NSTreeController에서 익숙해졌지만, 필요하지는 않습니다. –

관련 문제