문제

내 CollectionView의 각 항목에 사용되는 견해가 있습니다. 내 견해에서 CollectionViewItem에 대한 iboutlet을 가지고 있으며 인터페이스 빌더에 연결되어 있습니다. 내보기 코드에서 exprentedObject (핵심 데이터 객체)의 값에 액세스하고 싶습니다. 다음은 내가하려는 일의 예입니다.

.h 파일에서 :

IBOutlet NSCollectionViewItem *item; // Connected in IB

.m 파일에서

NSString *seq = [[item representedObject] valueForKey:@"seq"];
NSLog(@"Seq: %@", seq); // returns Seq: (null)

seq는 exprentedObject.se key path를 사용하여 IB의 CollectionViewItem보기에서 레이블에 묶여 있기 때문에 인구가됨을 알고 있습니다.

뷰의 코드에서 SEQ 값에 액세스하려고 할 때 NULL을 반환하는 이유는 무엇입니까?

도움이 되었습니까?

해결책

NSCOLLECTIONVIEWITEM은 ICBOUTLET 연결을 통해 항목의 뷰에서 프로토 타입 NSCOLLECTIONVIEWITEM으로 복사하지 않을 가능성이 높습니다. 따라서, item 그렇습니다 seq 또한 nil이 될 것입니다.

nscollectionViewItem 인스턴스에 액세스하기위한 일반적인 패턴은 프로토 타입에 바인딩하는 것입니다. 당신은 당신이 이것을했고 그것이 작동한다고 언급합니다. 그것은 단순히 그것이 전형적이고 지원되는 방법이기 때문입니다.

바인딩이 제공 할 수없는 방식으로 항목에 직접 연결 해야하는 경우 수동으로 설정해야 할 것입니다. 이를 수행하는 한 가지 방법은 NSCOLLECTIONVIEWITEM을 무시하는 것입니다 -copyWithZone:, Super를 호출 한 다음 수동으로 연결하십시오.

다른 팁

1) 하위 클래스 컬렉션보기에서 항목을 렌더링하는 데 사용되는 NSView

2)이 서브 클래스에서 대의원을 추가하십시오.

3) nscollectionViewItem을 subsass

4) setView : Method를 무시하십시오. 뷰의 대의원 속성을 nscollectionViewItem 인스턴스 (즉, 자체)로 설정하려면 줄을 추가하십시오.

이제 NSView 서브 클래스 내에서 대의원 속성을 통해 해당 NSCOLLECTIONVIEW 항목에 액세스 할 수 있습니다 (예 : exprentedObject에 액세스 할 수 있음).

나는 같은 문제가 있었지만 매우 쉬운 해결책을 찾았습니다.보기를 다른 .xib에 넣고 nscollectionviewitem (실제로 nsviewcontroller)에 연결했습니다. 그러면 .xib는 각 셀에 대해 사형화되고 모든 매장이 설정됩니다.

  1. 서브 클래스 nsview.
  2. 상기 서브 클래스에 대표 방법을 추가하십시오 ... - (void)mouseDownOnItemAtIndex:(NSUInteger)index 청취자에게 사용자가 특정 색인에서 항목을 클릭했음을 알리기 위해.
  3. 동일한 클래스에서 self.superview를 사용하여 컬렉션보기를 당깁니다. nsuinteger를 저장할 변수를 만듭니다. 메소드를 사용하여 항목의 색인 저장 [[collectionView subviews] indexOfObject:self]. 대의원 방법으로 해당 지수를 전달하십시오 index 매개 변수.
  4. NSVIEW에 정의 된 프로토콜을 준수하는 클래스는 이제 특정 셀의 모든 마우스 타운 이벤트에서들을 수 있습니다. 특정 항목의 대표를 원한다면 collectionView:itemAtIndex 그리고 항목을 통해 액세스하여 항목을 얻으십시오 representedObject 재산 NSCollectionViewItem.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top