2012-02-07 12 views
3

私はCocoaアプリケーションを作成しています。ビューが無効で、バックグラウンドジョブが完了するまで応答できないことをユーザーに示す必要があります。Cocoaでビューを「ビジー」とマークする

長いバージョン:私のアプリで

ビューは、サーバから取得し、いくつかのデータが含まれています。アプリがデータが無効であると判断すると、新しい情報を取得して表示します。通常、更新があまりにも早く見に何が起こるが、サーバやネットワークの問題が1秒か2秒以上かかるために、バックグラウンドジョブが発生した場合、私は仕事があるまで、ユーザ

  1. がビューと対話することはできませんことを確認する必要があります終了しました。
  2. ビューが更新を待機していることを確認できます。
  3. ジョブが終了するまで、アプリケーションの他の部分と引き続き対話できます。

1)が重要です。古いデータで開始された操作は失敗し、ネットワークまたはサーバーが遅い場合、ユーザーはその部分とやりとりする無駄な時間を無駄にしたくありませんアプリケーションの(ユーザーがまだの場合は、のデータを参照してください。実際には役に立ちますが、実際は重要ですが、重要ではありません)。

これはCocoaで標準的な方法は何ですか?価値のあるものについては、EclipseフレームワークでViewPartshowBusyメソッドを使用したと思います。

標準的な方法がない場合、誰もそれに対処するための提案はありますか?私はOS Xを非常に長く使っていないので、このシチュエーションでアプリケーションがどのように見えて振る舞うのかさえ分かりません。 OS X:http://cocoawithlove.com/2009/04/showing-message-over-iphone-keyboard.html

ここでは、全体のビューをNSProgressIndicatorに置き換え、タスクが終了した後にビューを復元する作業をしていますが、ビューを削除しています私のアプリが何か問題が起きた場合に、ファンキーな状態になる可能性があることを意味します。また、自分のクラスやカテゴリ(?)にこの機能を組み込むことができるようにしたいのですが、私のアプリケーションではいくつかの異なるビュークラスでこの問題が発生するためです。理想的にはEclipseのview.showBusy(true)/view.showBusy(false)のような単純なもので終わりたいと思います。

何かすべてのヘルプは高く評価されます。 ありがとう!

答えて

0

ビジービューの上に別のビューを描画するだけではどうですか。ビジーを意味するイメージを表示させるか、または半透明として描画するかのいずれかを行うことができるので、更新前のバージョンのビジービューを遮蔽することができます。

+0

これは、私がショーにリンクしたiOSの例です。 Appleのユーザーインターフェイスのガイドラインでは、非同期進捗モニターを近くに配置し、進捗モニターがどのビューに当てはまるかをユーザーに理解させることを推奨しています(これは劣っています)。私はまだ便利な解決策を見つけていない。このケースでは、クライアントがデータの有効性をポーリングするのではなく、データの変更をサブスクライブするようにして、クライアントがデータが古くなっていることがわかっている状態にならないようにしました。サーバーから更新が到着するまで、そのデータは有効であるとみなされます。 – dkh