【发布时间】:2011-06-20 12:53:48
【问题描述】:
我有一个NSImageCell 表列,其valuePath 绑定到我的对象通过NSArrayController 提供的路径。
我的NSTableViewDelegate 实现了-tableView:heightOfRow: 方法,以便具有可变的行高。我需要根据上述列中显示的图像尺寸计算行高。
不过,现在我的表现很糟糕,因为我每次迭代都调用[[NSImage alloc] initWithContentsOfFile:<path>]。有什么方法可以加载每个NSImageCell 已经检索到的图像表示以供显示?
我对使用 valuePath 绑定所展示的性能感到满意,并且我不希望自己缓存每张图片,因为会有很多图片,每张都有些大。
我尝试了NSTableColumn 方法-dataCellForRow:,这听起来很完美,只是返回的单元格返回一个objectValue,这似乎是为其加载数据的最后一行。
更新(解决,不满意)
我想出了一个近似的解决方案(在下面同时发布),但它看起来很笨拙(而且我已经看到它在随机、不可重现的情况下失败了),我仍在寻找更好的解决方案。
我正在使用-tableView:willDisplayCell:forTableColumn:row: 委托方法来填充一个可变字典,其中[[cell objectValue] size](图像的大小)键控到表示对象的唯一ID。然后,在-tableView:heightOfRow: 电话中,我正在查找这本词典的封面。我需要在加载数据后调用[tableView noteNumberOfRowsChanged],否则字典没有正确填充数据的初始屏幕。
【问题讨论】:
标签: objective-c cocoa macos nstableview nsimage