2010-08-11 5 views
1

나는 NSArray 사용자 정의 NSObjects입니다. 각 개체에는 그리드보기에 표시 할 이미지와 속성이 있습니다. NSMatrix는 내 문제에 대한 좋은 해결책 인 것처럼 보이지만 표시 할 개체의 내용을 가져 오는 데 문제가 있습니다.프로그래밍 방식으로 NSMatrix의 NSCell에 사용자 지정 개체의 배열 전달

몇 가지주의해야 할 점.

  1. 나는
  2. 내가 NSCollectionView를 사용 간주 한이 프로그램
  3. 을하려고하지만, NSMatrix 표시하고는
  4. 모든 셀이 같은 수행이 경우 더 나은 솔루션으로 핵심 데이터를 사용하고 있지 않다 서로 다른 형식으로 표시합니다. 즉, 서로 다른 유형의 객체, 다른 객체의 객체를 전달하고 싶지는 않습니다. 객체의 다른 인스턴스 인

나는 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에 아무것도 그리지 않았 음을 알려줍니다. 어느새 나를 더 혼란스럽게 만듭니다.

+0

"이것은 단지 첫 번째 객체 이미지를 만듭니다"는 의미는 무엇입니까? 내가 볼 수있는 한, 당신은 모든 것을 올바르게하고 있습니다. (셀의 model-object 속성에 명시 적으로 정의 된 접근 자 대신 합성 된 속성을 사용하지만, 이미 'objectValue' 속성이 있습니다.) –

+0

@Peter - 답장을 보내 주셔서 감사합니다. 내 문장에서 "이것은 단지 첫 번째 객체 이미지를 만듭니다."사실 내 예제에서 cellOne만이 행렬에 그려지는 것을 의미했습니다. cellTwo 결코 두려워하지 않습니다. 행렬에 행과 열이 하나만있는 것과 거의 같습니다. 매트릭스가 크기를 로그 아웃하여 올바른 크기인지 확인하고 배경색을 설정했는지 확인했습니다. 내 행과 열은 이니셜 라이저에 정의되어 있으므로 설정 중이라는 것을 알고 있습니다. 당신이 지적했듯이, 나는 옳았다 고 생각합니다. 너무 초조해! – Hooligancat

답변

0

실제로 행렬에 두 개의 셀이 있지만 해당 프레임이 너무 작아서 표시 할 수 있습니까? 세포를 추가 한 후 호출하십시오 [matrix sizeToCells]

관련 문제