3

私は長い間これを実装しようとしてきましたが、好ましい結果は得られませんでした。

HTTPリクエストが実行されるメソッド(具体的にはTwitterの更新)があり、HTTPリクエストの進行中に表示したいとしますUIActivityIndicatorView(呼び出されるデリゲートメソッドがあるため、いつ実行されるかがわかります)。リクエストが実行されたとき、ポジティブな結果またはネガティブな結果のいずれか)。

このクラスの実装にはスレッド化が必要であるという多くの回答を見てきました。最初startAnimatingは、別のスレッドでメソッドを呼び出し、 stopAnimating(新しいスレッドを開始せずに)メソッドを直接呼び出してみました。その後、この男がどのようにそれを行うかを見て、2つの異なる方法(Twitter更新のデリゲートメソッド)でインジケーターを開始および停止していたので、これはより安全だと思いました。

ただし、これを行う2つの方法のいずれも、希望する結果をもたらしませんでした(アクティビティインジケーターがまったく表示されません)。足りないものはありますか?

よろしくお願いします。質問が長すぎる場合はお詫び申し上げます。
あなたの助けは非常にありがたいです。

4

3 に答える 3

4

UIKitサブクラスを操作する場合、スレッド化は絶対に禁止されています。UIActivityIndi​​catorViewが内部でスレッドを使用しているという報告を見たことがあるかもしれませんが、それは決して複数のスレッドからオブジェクトにアクセスできることを意味するわけではありません。すべてのUIViewサブクラス(UIActivityIndi​​catorViewを含む)は、メインスレッドからのみアクセスする必要があります。-startAnimatingこれには、との呼び出しが含まれ-stopAnimatingます。

メインスレッドのアクティビティビューにのみアクセスし、それでも機能しないようにコードを書き直した場合、ビューは表示されているビューに追加されていないか、別のビューで覆われていると思います。ビュー、またはスーパービューの表示領域の外側に自分自身を置くフレームがあります。

于 2011-02-22T04:55:17.040 に答える
0

セカンダリスレッドでUIを実行することはできません。

メインスレッドからアクティビティビューを呼び出しながら、セカンダリスレッドでHTTPリクエストを実行する必要があります。

非常に使いやすいDSActivityViewを使用することをお勧めします。アクティビティビューを表示するための1行、非表示にするための1行。

于 2011-02-22T07:11:20.210 に答える
0

MBProgressHUDも簡単で、セカンダリスレッドが開始/終了したときに表示および非表示になります。このようなもの:

[HUD showhileexecuting:"yourstuff" animated:YES]

「Yourstuff」は別のスレッドで実行されます。

セカンダリスレッドでUIアクティビティを実行しないでください。

于 2011-02-22T08:01:51.463 に答える