나는 NSArray
사용자 정의 NSObjects
입니다. 각 개체에는 그리드보기에 표시 할 이미지와 속성이 있습니다. NSMatrix는 내 문제에 대한 좋은 해결책 인 것처럼 보이지만 표시 할 개체의 내용을 가져 오는 데 문제가 있습니다.프로그래밍 방식으로 NSMatrix의 NSCell에 사용자 지정 개체의 배열 전달
몇 가지주의해야 할 점.
- 나는
- 내가
NSCollectionView
를 사용 간주 한이 프로그램 - 을하려고하지만,
NSMatrix
표시하고는 - 모든 셀이 같은 수행이 경우 더 나은 솔루션으로 핵심 데이터를 사용하고 있지 않다 서로 다른 형식으로 표시합니다. 즉, 서로 다른 유형의 객체, 다른 객체의 객체를 전달하고 싶지는 않습니다. 객체의 다른 인스턴스 인
나는 NSView
(matrixContainerView)을 창에 표시합니다. 컨트롤러 파일의 matrixContainerView는 IBOutlet
입니다. 내 컨트롤러에서 나는 내로 awakeFromNib에 다음과 같은 한 :
NSMatrix* matrix = [[NSMatrix alloc]
initWithFrame:[matrixContainerView bounds]
mode:NSRadioModeMatrix
cellClass:[MyCustomCell class]
numberOfRows:5
numberOfColumns:5];
[matrix setCellSize:NSMakeSize(116, 96)];
[matrix setNeedsDisplay:YES];
[matrixContainerView addSubview:[matrix autorelease]];
[matrixContainerView setNeedsDisplay:YES];
MyCustomCell
헤더는 다음과 같습니다 클래스 :
@interface MyCustomCell : NSCell {
MyModel * theObject;
}
-(MyModel *)theObject;
-(void)setTheObject:(MyModel *)newValue;
하고 다음과 구현 파일을 (그림 간체) :
@implementation MyCustomCell
-(void)drawInteriorWithFrame:(NSRect)theFrame inView:(NSView *)theView {
...drawing code using MyModel e.g. [MyModel isValid] etc...
}
-(MyModel *)theObject {
return theObject;
}
-(void)setTheObject:(MyModel *)newValue {
[theObject autorelease];
theObject = [newValue retain];
}
@end
컨트롤러에서 MyModel
개체를 포함하는 배열을 초기화하고 채운 후를 채 웁니다. 10 개체의 인스턴스.
어떻게해야합니까?
MyCustomCell * cellOne = (MyCustomCell *)[matrix cellAtRow:0 column:0];
[cell setTheObject:[myArrayOfObjects objectAtIndex:0]];
MyCustomCell * cellTwo = (MyCustomCell *)[matrix cellAtRow:0 column:1];
[cellTwo setTheObject:[myArrayOfObjects objectAtIndex:1]];
을하지만 단지 제 1 물체 화상을 생성한다
I은 (단지 테스트로) 다음과 같은 배열에서 두 객체를 추가하는 시도했다. 위의 코드가 제대로 작동했다면 배열을 열거하고 객체를 추가하는 것은 간단합니다.
정확하게 표시 할 수 있도록 셀을 추가하고 해당 셀에 적절한 개체를 전달하는 방법은 무엇입니까?
Apple docs은 프로그래밍 가이드가 나오는 한 NSMatrix에서 최소한으로 말해야합니다. 거기에있는 정보는 나에게 매우 유용하지만 객체를 추가하고 표시 한 후에 만 가능합니다.
언제나처럼 모든 도움을 주시면 감사하겠습니다.
업데이트
내가 출력은 전혀 다른, 즉 내 사용자 지정 셀의 하나의 표현을 화면에 그려을하지 않습니다 (내 위의 예에 따라) 두 개체를 추가하지 마십시오. 이것은 내가 보는 단일 표현이 행렬의 초기화에서 수행되고 실제로 실제로 내가 생각할 때 실제로 행 0 열 0에 아무것도 그리지 않았 음을 알려줍니다. 어느새 나를 더 혼란스럽게 만듭니다.
"이것은 단지 첫 번째 객체 이미지를 만듭니다"는 의미는 무엇입니까? 내가 볼 수있는 한, 당신은 모든 것을 올바르게하고 있습니다. (셀의 model-object 속성에 명시 적으로 정의 된 접근 자 대신 합성 된 속성을 사용하지만, 이미 'objectValue' 속성이 있습니다.) –
@Peter - 답장을 보내 주셔서 감사합니다. 내 문장에서 "이것은 단지 첫 번째 객체 이미지를 만듭니다."사실 내 예제에서 cellOne만이 행렬에 그려지는 것을 의미했습니다. cellTwo 결코 두려워하지 않습니다. 행렬에 행과 열이 하나만있는 것과 거의 같습니다. 매트릭스가 크기를 로그 아웃하여 올바른 크기인지 확인하고 배경색을 설정했는지 확인했습니다. 내 행과 열은 이니셜 라이저에 정의되어 있으므로 설정 중이라는 것을 알고 있습니다. 당신이 지적했듯이, 나는 옳았다 고 생각합니다. 너무 초조해! – Hooligancat