首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从NSImageCell中获取显示的图像

从NSImageCell中获取显示的图像
EN

Stack Overflow用户
提问于 2011-06-20 12:53:48
回答 1查看 705关注 0票数 2

我有一个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],否则字典对数据的初始屏幕没有正确的填充。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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:之前被调用,因此可能无法工作。我没有把握。但我会从这开始。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6411435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档