1

REST API からのデータを表示する必要がある NSBrowser があります。この API は結果を返すのに時間がかかる場合があるため、バックグラウンドでネットワーク トラフィックを処理すると便利です (遅延フェッチ)。サーバー側の変更を反映するために、サブツリーを更新する必要がある場合があります。

私は2つの異なるアプローチを試しました:

  1. NSBrowserDelegate を使用します。[browserDelegate browser:child:ofItem:] などの関数が、まだ読み込まれていないデータを要求した場合、0 カウントを返し、バックグラウンド処理を開始します。データが利用可能になったら、列をリロードします (あまり効率的ではありません。新しいデータが入ってくると、ユーザーの選択が台無しになります)。
  2. NSTreeController を使用します。ブロッキング/同期アプローチを使用して、これをうまく機能させました。ただし、モデルを更新するたびに、NSBrowser はツリーをリセットし、選択を親に移動します。[obj mutableArrayValueForKey] アプローチを試しました。[treecontroller insertObject:atArrangedObjectIndexPath:] アプローチを試しました。「選択を保持」フラグを切り替えました。「挿入時に選択」を切り替えました。私が何をしても、NSBrowser は関連するサブツリーだけをきれいに更新したくありません。

結論: NSBrowser にデータを非同期的にロードするためのベスト プラクティスは何ですか?

4

0 に答える 0