2010-01-07 4 views
0

OutlineView와 "항목 추가", "그룹 추가"및 "삭제"버튼이있는 설정 패널이 있어야합니다. 버튼은 항목을 NSOutlineView에 추가합니다. 데이터는 NSMutableDictionary (또는 무엇이든간에)에 저장됩니다. OutlineView에 대해 정렬/드래그 드롭이 활성화되었습니다.코코아 - NSOutlineView를 수정하는 가장 좋은 방법은 무엇입니까

가장 좋거나 가장 불편한 방법은 무엇입니까 (적은 코드 작성)?

NSMutableDictionary를 수정하면 NSOutlineView가 NSMutableDictionary에서 새로 고칩니다. NSOutlineView를 수정하면 결과가 NSMutableDictionary에 저장됩니까? ... NSTreeController? ... CoreData?

그 이유는 무엇입니까?

미리 감사드립니다.

답변

1

이것은 매우 광범위한 질문입니다. 핵심 데이터 엔티티, NSMutableDictionary 또는 사용자가 직접 만든 사용자 정의 개체 인 모델 개체를 항상 모델 개체에 저장해야합니다. NSTreeController 또는 NSOutlineView 인스턴스에 데이터를 저장하면 안됩니다. 모델 개체가 아닙니다.

나머지 앱에 핵심 데이터를 사용하고 있고 개요보기로 조작 된 데이터를 유지해야하는 경우 이는 좋은 선택이지만 간단한 요구 사항 만있는 경우 과도 할 수 있습니다.

개요보기에 표시되는 내용을 제어하려면 또는 NSOutlineView 데이터 소스에 응답하고 프로토콜을 위임 한 자체 컨트롤러 개체를 사용할 수 있습니다. 실제로 항목이 그룹 항목인지 여부와 같은 일부 항목은 NSOutlineView 대리자 메서드로만 제어 할 수 있으므로 둘 다 사용할 수도 있습니다.

내 개인적인 경험에서 나는 NSTreeController이 매우 간단한 작업을 넘어서서 다루기가 매우 어려울 수 있다는 것을 알았습니다. 이제는 더 오래 사용할 수 있습니다. 내 컨트롤러에서 데이터 소스 메서드를 사용하는 것이 훨씬 간단하다는 것을 알았습니다.

개요보기의 내용을 수정하는 경우 컨트롤러를 통해 항상 모델을 수정해야하며보기를 직접 업데이트하면 안됩니다. 컨트롤러에 -add:과 같은 메서드를 구현하거나 -add: 메서드를 사용하는 경우 NSTreeController을 사용합니다.

그러면보기의 컨트롤러가 모델의 변경 사항을 감지하고보기를 업데이트하도록 요청해야합니다. 뷰 컨트롤러와 모델 컨트롤러는 동일한 객체 일 수 있지만 반드시 같을 필요는 없습니다. Key-Value Observing은 컨트롤러에 모델 변경을 알릴 수있는 유용한 기술입니다. NSTreeController``에

http://developer.apple.com/mac/library/samplecode/SourceView/

http://developer.apple.com/Mac/library/samplecode/AbstractTree/

+0

을 파견 :

다음은 유용하게 찾을 수있는 애플의 몇 가지 예제 코드입니다. 어구를 빌리 자면 "다친 상처"입니다. – Alex

관련 문제