2011-06-20 76 views
2

我有一個NSImageCell表列,其valuePath綁定到我的對象通過NSArrayController提供的路徑。從NSImageCell獲取顯示的圖像

我的NSTableViewDelegate實現了-tableView:heightOfRow:方法,以便具有可變的行高。我需要根據上述列中顯示的圖像尺寸計算行高。

現在,我得到可怕的表現,但是,因爲我打電話[[NSImage alloc] initWithContentsOfFile:<path>]每次迭代。有什麼方法可以加載每個NSImageCell已經檢索到的圖像表示?

我對使用valuePath綁定所展示的性能感到滿意,並且寧願不自行緩存每個圖像,因爲它們中會有很多,每個圖像都有些大。

我試過NSTableColumn方法-dataCellForRow:,聽起來很完美,除了返回的單元格返回一個objectValue似乎是數據加載的最後一行。

更新(解決方案,不合格)

我想出了一個近似解(同時貼在下面),但似乎笨拙(我已經看到它失敗隨機的,不可複製的時間),我我仍在尋找更好的解決方案。

我使用-tableView:willDisplayCell:forTableColumn:row:委託方法來填充可變字典,其中[[cell objectValue] size](圖片的大小)與所表示的對象的唯一ID綁定。然後,在-tableView:heightOfRow:的電話中,我正在查找這本詞典的封面。數據加載完成後,我需要撥打[tableView noteNumberOfRowsChanged],否則數據的初始屏幕字典不能正確填寫。

回答

1

我試過NSTableColumn方法-dataCellForRow:聽起來很完美,除了返回的單元格返回一個objectValue,它似乎是數據加載的最後一行。

這是因爲NSTableColumn只使用單個數據單元來顯示整個列,因此當它繪製時將其值更換。

如果我是你,我可能會嘗試在你的NSTableViewDelegate中實施– tableView:willDisplayCell:forTableColumn:row:方法。然後,您可以在要繪製細胞之前截取細胞,在那一刻獲取其值並緩存其高度(作爲NSNumber*CGFloat)。那麼你可以返回的值在-tableView:heightOfRow:

然後,有可能-tableView:heightOfRow:– tableView:willDisplayCell:forTableColumn:row:之前被調用,因此可能無法工作。我不確定。但那就是我要開始的地方。

+0

看起來像你在更新,因爲我在回答。 :P –

+0

是的,這有趣。 – Dov

相關問題