0

シナリオは次のとおりです。

ユーザーを別のビューに移動するボタンがあるビューがあります。次のviewcontrollerのviewDidLoadで、巨大なXMLファイルがダウンロードされ、解析されて画面に表示されます。このようにして、ビューがナビゲートされたときに画面にすでに表示されているデータを取得します。

問題は:

解析を含むビューコントローラを呼び出すボタンをクリックすると、アプリケーションが応答しなくなります。すべてのデータがダウンロードされて解析されるとすぐに、アプリケーションは次のビューに移動します。ここで、アプリケーションが応答しなくなるまで、そのボタンのクリックでアクティビティインジケーターを表示したいと思います。ビューが他のビューに移動するとすぐに、アクティビティインジケーターが停止します。着陸したいViewControllerのviewDidLoadにアクティビティインジケーターを入れてみましたが、役に立ちませんでした。

PS:アプリケーションの性質上、いくつかの制限があるため、「viewWillAppear」で解析を行うことができません。

返信を楽しみにしています。

4

4 に答える 4

3

バックグラウンドキュー/スレッドのUIを含まない主要な作業を行う必要があります。

GCDを使用すると、次のようになります。

// Start UIActivityIndicator

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    // Parse your XML

    dispatch_async(dispatch_get_main_queue(), ^{

        // Update the UI when you're finished

    }
}
于 2012-08-21T23:02:43.187 に答える
1

実際には、別のスレッドで解析を行う必要があります。このようにして、メインスレッド(UIスレッドでもある)を続行できます。を見てくださいperformSelectorInBackground

解析はおそらく前に行われるため、インジケーターは表示されませんviewDidLoad。最初にインジケーターを追加し、次に新しいView Controllerを押してから、インジケーターを削除することができます。

しかし実際には、これは非常に悪いUIとUXの設計であり、スレッドを使用する必要があります。

于 2012-08-21T22:53:21.073 に答える
1

うまくいけば、バックグラウンドでファイルをダウンロードします。これにNSOperationsを使用する場合は、その操作でXMLファイルを解析することもできます。

これにより、必要に応じて進行状況を表示する2つの方法が提供されます(単なるスピナーよりも優れています)。ダウンロードには50%、解析には50%を許可します。urlConnectionデリゲート応答を受け取ると、ダウンロードの大きさを確認でき、データが入ってくると進行状況が更新されます。解析を開始するときに、parser:didEndElementにコードを入れて、パーサーにその行を尋ねることができます。行の総数がわかっている場合は、その進行状況がわかります。

于 2012-08-21T22:58:57.217 に答える
0

MBProgressHUDを使用できます。ここにそのリンクがあります。

https://github.com/jdg/MBProgressHUD

http://mobile.tutsplus.com/tutorials/iphone/ios-sdk_uiactivityindicatorview_mbprogresshud/

これは、viewcontrollerviewdidloadメソッドで使用する必要があります。

于 2012-08-24T12:30:46.240 に答える