0

私はNSCollectionView約1000個のアイテムをロードする必要があります(アイテムにはテキストのみが含まれ、画像やその他のリッチなものは含まれていません)。

UI が回転していることをユーザーに知らせるために UI を回転させたかったNSProgressIndicatorのですが、インジケーターが UI に表示され、まったく回転しないことがわかりました。実際、データのロード中に UI 全体がハングし、タスクがそのバインディング タスクのメイン スレッドの 100% を占有してNSCollectionViewいるように見えます。NSCollectionView

NSProgressIndicatorバインディング中にスピンすることは可能ですか?

編集:

NSArrayController をデータ ソースとして使用し、NSCollectionView のコンテンツを arrayController.arrangedObjects にバインドします。新しいアイテムが arrayController に追加されると、collectionView が自動的に更新されます。

バインド タスクをセカンダリ スレッドに配置すると、各アイテムが UI に 1 つずつ表示され、バインドするアイテムが約 1000 あるため、それぞれに約 0.5 秒かかることがわかります。タスクの完了には時間がかかりすぎます。 .

私が探しているのは、新しいアイテムを collectionView にバインドする場合、バインディングはメイン スレッドから実行され、progressIndicator がスムーズに回転し、ロード タスク全体が完了すると、collectionView が更新され、progressIndicator がなくなることです。

4

1 に答える 1

0

メイン イベント ループ (NSProgressIndicator タイマーが実行されている場所) をブロックしないように、NSCollectionView の項目の読み込みをセカンダリ スレッドに移動する必要があります。SourceViewサンプル コード プロジェクトを参照してください。具体的には、IconViewController.m ソース ファイルの gatherContents: メソッド。

于 2015-03-30T15:19:19.387 に答える