我有一个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]
,否则字典未正确填充初始数据屏幕。
答案 0 :(得分:1)
我尝试了NSTableColumn方法-dataCellForRow:,这听起来很完美,除了返回的单元格返回一个objectValue,它似乎是加载数据的最后一行。
这是因为NSTableColumn
仅使用单个数据单元格来显示整个列,并在绘制时交换其值。
如果我是你,我可能会尝试在NSTableViewDelegate
中实施– tableView:willDisplayCell:forTableColumn:row:
方法。然后你可以在它即将被绘制之前截取单元格,在那一刻获得它的值,并缓存它的高度(作为NSNumber*
或CGFloat
)。然后,您可以在-tableView:heightOfRow:
中返回 值。
然后,-tableView:heightOfRow:
之前可能会调用– tableView:willDisplayCell:forTableColumn:row:
,因此可能无效。我不确定。但这就是我要开始的地方。