간단한 내장 옵션을 원할 경우 IB로 지정한 클래스의 인스턴스 만 만들 것입니다. 다른 인스턴스를 만들려면 직접 코드를 작성해야합니다. 새 클래스를 계층 구조의 적절한 위치에 삽입하려면 Tree Controller에서 필요한 모든 정보를 가져야합니다. 근면 한 검색을 통해 필요한 코드를 얻을 수 있습니다.
NSArrayController
메커니즘이 작동하는 방식을 이해하는 데 도움이되도록 Objective-C와 런타임에 대한 지식을 최대한 활용하여 설명합니다. Objective-C는 매우 동적 인 언어이며 선택기 (메서드)를 동적으로 호출 할 수 있습니다. NSArrayController
이 클래스 (예 : "직원")의 이름을 알고 있기 때문에, 내부 구현은 아마도 (수 쉽게 또는) 다음과 같은 :
NSString *removeSelectorName = [NSString stringWithFormat:@"removeObjectFrom%@sAtIndex:",
self.objectClassName];
SEL removeSelector = NSSelectorFromString(removeSelectorName);
[dataRepresentation performSelector:removeSelector
withObject:[NSNumber numberWithInt:self.selectionIndex];
이의 예는와 마찬가지로, KVO 다른 곳이 있습니다 +keyPathsForValuesAffecting<Key>
메서드 (documentation here)는 어떤 키가 다른 키를 업데이트하는지 설명합니다. 키가 fullName
이름과 첫 번째 또는 마지막 이름 변경, 당신은 당신의 클래스에서이를 구현 할 때마다 업데이트되는 경우
+ (NSSet *)keyPathsForValuesAffectingFullName {
return [NSSet setWithObjects:
@"firstName",
@"lastName",
nil];
}
또한 검색 (그리고 this question) 어떻게의 의미를 설명하고이 documentation page를, 켜져 메서드가 호출됩니다.
출처
2011-12-14 13:04:12
Dov
트리 컨트롤러로 무엇을 시도했으며 어떻게 실패 했습니까? 그것은 유용한 정보가 될 것입니다. – Dov
폴더 유형과 사용자 객체의 두 가지 노드 유형이 있다고 가정 해보십시오. IB에서는 트리 컨트롤러의 객체 컨트롤러 클래스 이름을 Folder 또는 Person으로 설정하여 둘 중 하나를 추가 할 수 있습니다. 하지만 트리의 깊이에 따라 또는 다른 추가 및 제거 버튼 쌍을 사용하여 Folder 또는 Person을 추가 할 수는 없습니다. –