我有一个NSImageCell表列,它的valuePath绑定到我的对象通过NSArrayController提供的路径。
我的NSTableViewDelegate实现了-tableView:heightOfRow:方法,以便有可变的行高。我需要根据前面列中显示的图像的尺寸来计算行高。
不过,现在我的性能很差,因为每次迭代都要调用[[NSImage alloc] initWithContentsOfFile:<path>]。是否有任何方法加载每个NSImageCell已经检索到的图像表示以供显示?
我对使用valuePath绑定显示的性能很满意,并且不愿意单独缓存每个映像,因为它们中会有很多,每个映像都比较大。
我尝试了NSTableColumn方法-dataCellForRow:,这个方法听起来很完美,但返回的单元格返回一个objectValue,该objectValue似乎是加载数据的最后一行。
更新(解决方案,不满意)
我想出了一个近似解(同时发布在下面),但它似乎很笨拙(而且我已经看到它在随机、不可再生的时候失败了),而且我仍然在寻找一个更好的解决方案。
我使用-tableView:willDisplayCell:forTableColumn:row:委托方法来填充一个可变字典,其中[[cell objectValue] size] (图像的大小)键上了表示对象的唯一ID。然后,在-tableView:heightOfRow:调用中,我从该字典中查找封面。在加载数据之后,我需要调用[tableView noteNumberOfRowsChanged],否则字典对数据的初始屏幕没有正确的填充。
发布于 2011-06-20 13:29:44
我尝试了NSTableColumn方法-dataCellForRow:,这个方法听起来很完美,但返回的单元格返回的objectValue似乎是加载数据的最后一行。
这是因为NSTableColumn只使用一个数据单元来显示整个列,在绘制时交换它的值。
如果我是您,我可能会尝试在您的– tableView:willDisplayCell:forTableColumn:row:中实现NSTableViewDelegate方法。然后,您可以在单元格即将绘制之前拦截它,在此时获取它的值,并只缓存它的高度(作为NSNumber*或CGFloat)。然后可以在-tableView:heightOfRow:中返回该值。
再说一次,-tableView:heightOfRow:可能在– tableView:willDisplayCell:forTableColumn:row:之前被调用,因此可能无法工作。我没有把握。但我会从这开始。
https://stackoverflow.com/questions/6411435
复制相似问题