【问题标题】:Getting the displayed image out of an NSImageCell从 NSImageCell 中获取显示的图像
【发布时间】: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


    【解决方案1】:

    我尝试了 NSTableColumn 方法 -dataCellForRow:,这听起来很完美,但返回的单元格返回的 objectValue 似乎是为其加载数据的最后一行。

    这是因为NSTableColumn 仅使用单个数据单元格来显示整个列,并在绘制时交换其值。

    如果我是你,我可能会尝试在你的NSTableViewDelegate 中实现– tableView:willDisplayCell:forTableColumn:row: 方法。然后你可以在它即将被绘制之前截取单元格,获取它的值,并只缓存它的高度(作为NSNumber*CGFloat)。然后你可以在-tableView:heightOfRow:中返回那个值。

    再一次,-tableView:heightOfRow: 可能在 – tableView:willDisplayCell:forTableColumn:row: 之前被调用,所以这可能不起作用。我不知道。但这就是我要开始的地方。

    【讨论】:

      猜你喜欢
      • 2015-12-18
      • 1970-01-01
      • 1970-01-01
      • 2019-07-26
      • 2016-11-16
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      • 2019-04-25
      相关资源
      最近更新 更多