2010-08-11 37 views
1

我有一個NSArray自定義NSObjects。每個對象都有一些屬性和一個我想在網格視圖中顯示的圖像。 NSMatrix似乎是我的問題的一個很好的解決方案,但我有問題獲取對象的內容顯示。在NSMatrix中將自定義對象數組傳遞給NSMatrix編程式

幾件事情要注意。

  1. 我不使用核心數據
  2. 我試圖做到這一點編程
  3. 我一直在使用NSCollectionView考慮,但是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對象的數組的一些初始化和填充後,我想填充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行繪製任何東西,事實上我以爲我是。這讓我更加困惑。

+0

你是什麼意思「這只是創建第一個對象圖像」?據我所知,你做的都是對的。 (我將使用合成屬性而不是顯式定義的訪問器來獲取單元格的模型對象屬性,而且它已經具有'objectValue'屬性。) – 2010-08-11 09:53:08

+0

@Peter - 感謝您的回覆。在我的陳述「這只是創建第一個對象圖像」我實際上只意味着cellOne(從我的例子)被繪製到矩陣中。 cellTwo永遠不會被繪製。就好像矩陣中只有一行和一列。我已經通過註銷尺寸來確認矩陣是正確的尺寸(並確定背景顏色)。我的行和列是在初始化程序中定義的,所以我知道他們正在設置。正如你所指出的,它*看起來是正確的。太令人沮喪了! – Hooligancat 2010-08-11 16:13:24

回答

0

可能是矩陣實際上有兩個單元,但其框架太小而無法顯示它們? 添加單元格後嘗試調用[matrix sizeToCells]