0

我有一个通过 HTTP 从远程服务器返回的大型数据集(大约 3500 个对象)。目前,数据正在 NSCollectionView 中呈现。数据的一个方面是到服务器的路径包,用于表示数据的小图像(为简单起见,请考虑缩略图)。

Bindings 非常适合已经返回的数据,并且通过 valueurl 绑定来绑定图像很容易。但是,当滚动浏览数据集时,用户界面非常缓慢——这让我认为这NSCollectionView是在检索所有图像数据,而不仅仅是用于显示当前可见图像的图像数据。

我的印象是 Cocoa 控件足够聪明,只能检索通过延迟加载实际输出到用户界面的信息的数据。这当然似乎是这种情况NSTableView- 但我可能会被这个想法误导。

valueurl 绑定应该懒惰地行动,而且,它应该在NSCollectionView?

我可以创建一个缓存机制(实际上我已经为另一个应用程序准备好了这样的东西 - 如果你有兴趣使用来自异步 NSURLConnection 的数据填充 NSImage ,请参阅我的帖子)但我真的不想走这条路线如果对于这个特定的实现,我不必这样做,因为用户可能会经常更改数据集,并且可能只需要数据的小子集。

有什么建议的方法吗?

谢谢!

更新

经过更多测试后,似乎出现了问题,因为通过数据集的滚动操作会导致从服务器请求每个图像。一旦所有图像都在数据集中传递,响应非常快。

所以问题......有没有办法在滚动时关闭valueurl fetch并在滚动完成后重新打开它?

4

1 回答 1

0

我的解决方案是使用自定义缓存机制,就像我已经用于另一个应用程序的缓存机制一样。问题很明显,因为当您滚动浏览尚未下载的图像时,控件会触发自身去获取尚未下载的文件。

下载后,图像在本地可用,因此滚动速度正常化。解决方案是检查图像是否在本地可用,并在后台下载图像时显示备用应用程序包图形。下载映像后,使用替换来自捆绑包的存根映像的映像更新模型。

这使 UI 始终处于非常响应的状态,使用户能够进行交互并允许对图像进行自定义背景管理。

当然,如果 Cocoa 能帮我完成这一切会很好,但那我还能做什么呢?:-)

于 2010-04-02T21:33:42.743 回答