비교적 일반적인 작업이라고 생각되는 것을 수행하는 데 어려움을 겪고 있습니다. 나는 배열에 NSArrayController
을 통해 바인딩 된 NSTableView
을 가지고 있습니다. 배열 컨트롤러의 내용은 모델 클래스의 하나 이상의 NSObject
인스턴스가 포함 된 NSMutableArray
으로 설정되어 있습니다. 어떻게 해야할지 모르겠지만, 바인딩이 쉬운 방식으로 모델을 NSCell
서브 클래스에 노출시켜야합니다.NSTableView의 사용자 지정 NSCell에서 바인딩을 사용하여 모델 개체 노출
설명의 목적으로 개체 모델은 이름, 성, 나이 및 성별로 구성된 사람이라고 말합니다. 따라서 모델은 다음과 같이 나타납니다.
@interface PersonModel : NSObject {
NSString * firstName;
NSString * lastName;
NSString * gender;
int * age;
}
분명히 적절한 설정 도구, 클래스에 대한 getter init 등입니다. 내 컨트롤러 클래스에서
내가 정의한 NSTableView
, NSMutableArray
과 NSArrayController
:
myPersonArray --> myPersonArrayController --> table column binding
이 작품 : 나는 쉽게 해당 컬럼 모델을 결합 할 수있는 인터페이스 빌더를 사용하여
@interface ControllerClass : NSObject {
IBOutlet NSTableView * myTableView;
NSMutableArray * myPersonArray;
IBOutlet NSArrayController * myPersonArrayController;
}
벌금. 그래서 여분의 열을 제거하고 NSArrayController
에 바인딩 된 하나의 열을 숨기고 (이것은 각 행과 NSArrayController
사이의 연결을 생성하고 유지하므로) 내 NSTableView
과 숨겨진 열의 표시 열 중 하나가 표시됩니다. 내가 NSCell
하위 클래스를 만들고 셀을 만들려면 적절한 그리기 방법을 넣어.
MyCustomCell * aCustomCell = [[[MyCustomCell alloc] init] autorelease];
[[myTableView tableColumnWithIdentifier:@"customCellColumn"]
setDataCell:aCustomCell];
이를 너무, 도면의 관점에서 잘 작동 : 내 awakeFromNib
에서 나는 사용자 정의 NSCell
서브 클래스를 설정합니다. 내 사용자 정의 셀을 열에 표시하고 배열 컨트롤러의 모든 관리 객체에 대해 반복합니다. 배열 컨트롤러에서 객체를 추가하거나 객체를 제거하면 그에 따라 테이블이 업데이트됩니다.
그러나 ... 내 PersonModel
개체가 내 NSCell
하위 클래스에서 사용할 수 있다는 인상하에있었습니다. 그러나 나는 그것에 도착하는 방법을 모른다. setter와 getters를 사용하여 각각 NSCell
을 설정하고 싶지 않습니다. 그 이유는 배열 컨트롤러에서 참조하는 대신 NSCell
에 데이터를 저장하여 전체 모델 개념을 깨기 때문입니다.
예, 사용자 정의 NSCell
이 있어야 여러 열을 가질 수 없습니다. 여기 어디에서 왔니?
Google 및 StackOverflow 검색 외에도 필자는 Apple의 문서를 반드시 읽으면서 답변을 찾지 못한 것 같습니다. 나는 수풀을 두들겨 다니는 많은 참고 문헌을 발견했지만 NSArrayController
과 관련된 것은 발견하지 못했습니다. 컨트롤러는 모델 엔티티의 다른 요소 (예 : 마스터/세부 시나리오)에 바인딩 할 때 매우 쉽게 작업을 수행합니다. 나는 Core Data를 사용할 때 많은 답변을 찾았지만 Core Data를 사용하지는 않았다.
표준에 따라 제공 할 수있는 도움에 대해 매우 감사드립니다!
이것은 훌륭합니다. 나는 한동안 구현의 괴물과 싸우고 있었고,보기 흉한 프랑켄슈타인 만 보였습니다. CoreData 객체를 사용하고 있지만 이것이 훌륭한 해결책이라고 생각합니다. –
@Greg - 기꺼이 서비스 할 수 있습니다! 나는 해결책을 찾기 전에 며칠 동안이 문제를 감추었습니다. – Hooligancat