以编程方式将自定义对象数组传递给NSMatrix中的NSCell

时间:2010-08-11 08:07:58

标签: objective-c cocoa subclass nscell nsmatrix

我有NSArray个自定义NSObjects。每个对象都有一些属性和一个我想在网格视图中显示的图像。 NSMatrix似乎是我的问题的一个很好的解决方案,但我在获取要显示的对象的内容时遇到问题。

值得注意的事情。

  1. 我没有使用核心数据
  2. 我正在尝试以编程方式执行此操作
  3. 我考虑过使用NSCollectionView,但在这种情况下,NSMatrix似乎是更好的解决方案
  4. 所有单元格都遵循相同的显示格式 - 即我不想传递不同单元格不同类型的对象,只是对象的不同实例
  5. 假设我在窗口中有NSView(matrixContainerView)。控制器文件具有IBOutlet到matrixContainerView。在我的控制器中,我在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个对象的数组的初始化和填充之后,我想用NSMatrix填充对象的实例。

    我该怎么做?

    我尝试过如下添加数组中的两个对象(就像测试一样):

    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]];
    

    但这只会创建第一个对象图像。如果上面的方法有效,那么枚举数组并添加对象将是一项简单的任务。

    如何添加单元格并将相应的对象传递给这些单元格才能正确显示?

    就编程指南而言,Apple docs在NSMatrix上至少可以说是稀疏的。那里的信息对我来说非常有用,但只有在我添加了对象并让它们显示之后才会显示出来!

    像往常一样,所有人都非常感激。

    更新

    如果我不添加这两个对象(按照上面的例子),输出也没有什么不同,即我的自定义单元格的单个表示被绘制到屏幕上。这告诉我,我看到的单个表示是在矩阵的初始化时完成的,事实上我并没有向第0列第0行绘制任何东西,实际上我认为我是。这让我现在更加困惑。

1 个答案:

答案 0 :(得分:0)

可能是矩阵实际上有两个单元格,但它的框架太小而无法显示它们? 添加单元格后,请尝试调用[matrix sizeToCells]