2010-03-30 47 views
0

我有一個大型數據集(大約3500個對象),它通過HTTP從遠程服務器返回。目前數據正在NSCollectionView中呈現。數據的一個方面是爲服務器提供一個代表數據的小圖片的路徑包(爲簡單起見,請參考縮略圖)。Valueurl在大數組上綁定導致用戶界面不穩定

綁定對於已經返回的數據非常有效,並且通過valueurl綁定綁定圖像很容易。但是,滾動瀏覽數據集時用戶界面非常緩慢 - 這使我認爲NSCollectionView正在檢索所有圖像數據,而不是用於顯示當前可查看圖像的圖像數據。

我的印象是,Cocoa控件足夠聰明,只能檢索實際通過延遲加載輸出到用戶界面的信息的數據。這當然似乎是NSTableView的情況 - 但我可能誤導了這個想法。

如果valueurl綁定行爲懶惰,而且,它應該在NSCollectionView懶洋洋地行事?

我可以創建一個緩存機制(事實上,我已經有了這樣的東西,適用於另一個應用程序 - 如果您有興趣,請參閱我的帖子Populating NSImage with data from an asynchronous NSURLConnection)但我真的不想走這條路線,由於用戶可能經常更改數據集並且可能只需要數據的小部分集合,因此不得不針對此特定實現。

任何建議的方法?

謝謝!

更新

經過一些測試,似乎問題就出現了,因爲通過數據集的滾動動作,導致從服務器請求的每個圖像。一旦所有的圖像在數據集中傳遞完畢,響應速度非常快。

所以問題......有什麼方法可以在滾動時關閉valueurl提取並在滾動完成時將其重新打開?

回答

0

我的解決方案是使用自定義緩存機制,就像我已經用於其他應用程序的機制。這個問題表現出來,因爲當你滾動瀏覽尚未下載的圖像時,控制器會觸發自己去獲取尚未下載的文件。

下載後,圖像可在本地使用,因此滾動速度正常化。解決方案是檢查圖像是否在本地可用,並在圖像在後臺下載時顯示備用應用程序包圖形。圖像下載完成後,使用圖像替換來自捆綁包的存根圖像更新模型。

這使得用戶界面始終處於非常敏感的狀態,使用戶能夠進行交互並允許對圖像進行自定義後臺管理。

當然,如果Cocoa能夠爲我提供這一切,那該多好,但是我還有什麼可做的呢? :-)