2014-06-15 2 views
2

NSCollectionView 기반 마스터 - 세부 인터페이스 인 을 마스터에 표시하고 상세보기의 목록 + 카드를 표시하고자합니다.계층 적 모델 용 코코아 바인딩

Board는 입력 목록 ListNSMutableArray 특성 lists을 보유하고 형 카드 CardNSArray 특성 cards를 보유하는 NSString 속성이 name

의 관계는 따라서 보드 -> 일대 목록 - -> 많음 카드

마스터 인터페이스가 정상입니다.

상세 인터페이스에는 보드의 해당 목록의 제목 이 채워집니다. 세부 인터페이스 내에서 모든 목록에 대해 카드를 사용하여 NSPopupButton을 채 웁니다.

문제 : NSPopupButton이 비어 있습니다.

Output: [<__NSArrayI 0x60000007b240> addObserver:forKeyPath:options:context:] is not supported. Key path: name

그래서 KVO, KVC와 바인딩 문서를 읽은 후 나는 계층 모델의 종류에 대한 매뉴얼 KVO을해야하는 경우 확실하지 않다. 또한 출력은 name 속성이 KVC/KVO를 따르지 않는다는 것을 암시하지만 NSString 일뿐입니다.

NSTreeController를 사용 하시겠습니까?

바인딩과 같이 설정은 다음과 같습니다

BoardArrayController ->

  • ** 모델 키 경로 파일의 소유자에 바인딩 : 보드

ListArrayController -> BoardArrayController

에 바인딩
  • ** 컨트롤러 키 : arrangedObjects
  • ** 모델 키 경로 : 목록
  • ** 모드 : 클래스

CardArrayController -> ListArrayController

에 바인딩
  • ** 컨트롤러 키 배열 객체
  • ** 모델 키 경로 : 카드
  • ** 모드 : 클래스

NSPopupButton는

  • 컨트롤러 내용에 대한 키가 있습니다 arrangedObjects를
  • 내용 가치
  • 컨트롤러 키 : arrangedObjects 및 모델 키 경로 : 내가 제대로 이해한다면

는 제안에,

답변

1

을 기쁘게 이름 마스터 인터페이스에서, 사용자는 보드를 선택한다. 그런 다음 세부 인터페이스에 선택한 게시판의 목록이 표시됩니다. 그렇다면 ListArrayControllerBoardArrayController, 컨트롤러 키 selection (arrangedObjects 아님), 모델 키 경로 lists에 바인딩되어야합니다.

마찬가지로 CardArrayControllerListArrayController, 컨트롤러 키 selection, 모델 키 경로 cards에 바인딩되어야합니다. 사용자가 먼저 목록을 선택하고 해당 목록의 카드가있는 팝업이 표시되는지 또는 팝업이 두 번째 모음보기의 각 항목에 있는지 여부는 분명하지 않습니다. 그렇다면 각 항목에 별도의 배열 컨트롤러가 필요하며 항목보기가 별도의 NIB에있는 경우 가장 쉽습니다. 각 list 컬렉션 뷰에서 각보기의 항목에 대한 representedObject 인 경우

+0

목록 이름과 카드는 상세보기에 직접 표시됩니다. 왜 배열 객체가 아닌'selection'을 사용해야합니까? – Rabiees

+0

NSCollectionViewItem의 @mikeD와 조합하여 수정 한 내용이 적용됩니다. 이제 NSTableColumn에 동일한 내용을 채우고 내용을 채우려 고 시도했지만 작동하지 않습니다. 대신에'CardArrayController'와 Controller Key : 선택과 M.K.P 이름을 사용하면 행을 선택할 수 있지만 텍스트는 포함되어 있지 않습니다. – Rabiees

1

는 다음 각 list에있는 cards 배열에 따라 의존 readonly있는 NSArray 속성과 각 PopUpButton에 채울 수 있습니다. List 클래스에서 arrangedCards를 속성으로 추가합니다.

- (NSArray *)arrangedCards 
{ 
    return [[self valueForKey:@"cards"] sortedArrayUsingDescriptors: 
     [self arrangedCardsSortDescriptors]]; 
} 

팝업에 대해 원하는 정렬을 사용하십시오. 이것은 name으로 정렬됩니다.

- (NSArray *)arrangedCardsSortDescriptors 
{ 
    NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey: 
     @"name" ascending:YES]; 
    return @[sortByName]; 
} 

팝업 내용을 NSCollectionViewItem에 바인드하십시오.

모델 키 경로는 representedObject.arrangedCards입니다.

콘텐츠 값으로 representedObject.arrangedCards.name을 사용하십시오.