2010-11-20 2 views
0

콘텐츠가 적절한 NSTreeController에 바인딩 된 NSOutlineView가 있습니다. 앱이로드 될 때를 제외하고는 NSOutlineView의 내용 중 절반 만 표시됩니다.NSOutlineView가 모든 콘텐츠를 새로 고치거나 표시하지 않습니다.

내가 cmd + Tab을 사용하여 뒤로 이동하면 모든 콘텐츠가 표시됩니다. 콘텐츠가 있어야하는 빈 행을 클릭하면 내가 클릭 한 행의 텍스트가 갑자기 나타납니다. 내용이 거기에있어, 그것은 단지 적절하게 상쾌하지 않습니다. 내가 NSOutlineView needDisplay 메시지 또는 비슷한 뭔가를 보낼 필요가 있다고 생각하지만 꽤 모르겠어요.

이것은 꽤 비논리적 인 것처럼 보입니다. NSOutlineView는 바운드 될 때 해당 내용을 올바르게 표시 할 수 있어야합니다. 내가 놓친 게 분명해?

답변

0

사과 설명서에 따르면, 작성한 후에는 윤곽선보기로 항상 -reloadData을 보내야합니다. 귀하의 경우 NIB가 로딩을 완료 한 곳이면 어디에나있을 것입니다 (-awakeFromNib? -applicationDidFinishLaunching? 구현에 따라 다름).

아웃 라인보기를 보냈습니까 -reloadData 메시지가 왔습니까? 이것은 항상 나를 위해 작동합니다.

+1

이것은 작동하지 않습니다. 여기의 문서는 NSOutlineView가 바인딩이 아닌 데이터 소스를 사용할 때를 나타냅니다. 데이터 바인딩을 사용하는 객체가 Key-Value-Observing을 사용하기 때문에 reloadData를 호출해야한다고 생각하지 않습니다. –

+0

아 물론 네, 전에 코코아 바인딩으로 개요보기를 사용하지 않았습니다. – d11wtq

0

이 NSOutlineView 바인딩을 포기하고 대신 NSOutlineViewDataSource를 사용하여 전환했습니다. 나는 내 코드의 일부가 KVO를 완벽하게 준수하지 못하고 이것이 제대로 작동하지 않는다고 생각한다.

0

KVO를 사용하는 경우 willChangeValueForKey:didChangeValueForKey:을 NSOutlineView에 바인딩 된 속성을 소유 한 객체 (대개 컨트롤러)에 보내 변경 알림을 보낼 수 있습니다. 이 메시지는 reloadData처럼 awakeFromNib: 또는 applicationDidFinishLaunching: 처리기에서 전송할 수 있습니다.

질문에 (최소) sample code을 추가하면 문제가 해결 될지 또는 해결해야 할 것이 있는지 여부를 파악할 수 있습니다.