0

HTTP経由でリモートサーバーから返される大きなデータセット(約3500個のオブジェクト)があります。現在、データはNSCollectionViewに表示されています。データの1つの側面は、データを表す小さな画像のサーバーへのパスパックです(簡単にするためにサムネイルを考えてください)。

バインディングは、すでに返されたデータに対して素晴らしく機能し、valueurlバインディングを介して画像をバインドするのは簡単です。ただし、データセットをスクロールするときのユーザーインターフェイスは非常に遅くなります。これによりNSCollectionView、現在表示可能な画像の表示に使用される画像データだけでなく、すべての画像データを取得しているように見えます。

Cocoaコントロールは、遅延読み込みによって実際にユーザーインターフェイスに出力されている情報のデータのみを取得するのに十分スマートであるという印象を受けました。これは確かに当てはまるようですNSTableViewが、私はこの考えを誤解している可能性があります。

valueurlバインディングは遅延して動作する必要があり、さらに、それは遅延して動作する必要がありNSCollectionViewますか?

キャッシングメカニズムを作成することはできますが(実際、別のアプリケーション用にそのようなものがすでに用意されています。非同期NSURLConnectionからのデータをNSImageに入力することに興味がある場合は、こちらの投稿を参照してください)。ユーザーはデータセットを頻繁に変更する可能性があり、データの小さなサブセットのみが必要になる可能性があるため、この特定の実装を行う必要はありません。

提案されたアプローチはありますか?

ありがとう!

アップデート

さらにテストを行った後、データセットをスクロールするアクションによって各画像がサーバーから要求されるため、問題が発生したようです。すべての画像がデータセットに渡されると、応答は非常に高速になります。

質問...スクロール中にvalueurlフェッチをオフにし、スクロールが終了したときに再びオンにする方法はありますか?

4

1 に答える 1

0

私の解決策は、別のアプリケーションで既に使用しているようなカスタム キャッシュ メカニズムを使用することです。まだダウンロードされていない過去の画像をスクロールすると、コントロール自体がトリガーされ、まだダウンロードされていないファイルが取得されるため、問題が発生します。

ダウンロードした画像はローカルで利用できるため、スクロール速度は正常化されます。解決策は、画像がローカルで利用可能かどうかを確認し、画像がバックグラウンドでダウンロードされている間に別のアプリ バンドル グラフィックを表示することです。イメージがダウンロードされたら、バンドルから取得したスタブ イメージを置き換えるイメージでモデルを更新します。

これにより、UI は非常に応答性の高い状態のままになり、ユーザーは対話することができ、画像のカスタム バックグラウンド管理が可能になります。

もちろん、Cocoa がこれらすべてを私に代わって識別してくれればよかったのですが、そうすると、私は何をしなければならないのでしょうか? :-)

于 2010-04-02T21:33:42.743 に答える