ステータスバーのインジケーターが表示されない場合 : Objective-C プログラミング
PROGRAM
ステータスバーのインジケーターが表示されない場合
iPhone アプリでは、ステータスバーのところに、ネットワークアクセスしているかどうかを視覚的に知らせるインジケーターを表示できるようになっています。
インジケーターの表示自体は簡単で、次のようにすれば、ステータスバー上にインジケーターが表示されてクルクル回ります。
// ネットワークインジケーターをアクティブにします。
UIApplication* application = [UIApplication sharedApplication];
application.networkActivityIndicatorVisible = YES;
これだけの簡単なコードのはずなのですけど、このようにしても何故かネットワークインジケーターが表示されない場合がありました。
その原因のひとつは、メインスレッド以外のスレッドで上記コードを実行していた場合でした。
iOS アプリでは UI の処理に関するコードはメインスレッドで実行しないといけないという基本的なルールがあり、それを守らないと UI の表示がおかしくなったりすることが良く起こります。
今回のネットワークインジケーターもその例に漏れず、メインスレッドで実行してあげる必要がある感じでした。
もうひとつの原因が、表示している時間が一瞬の場合です。
これは NSURLRequest を使ってインターネットからデータを読み込むときに遭ったのですけど、読み込み開始と合わせてネットワークインジケーターを表示させて、読み込み完了とともにインジケーターを消すコードを書いたところ、インジケーターが表示されずに読み込みが完了することがありました。
データは確かに読めているし、データはインターネットにあるので読み込みには少しは時間がかかるはずなのにおかしいと思ったら、NSURLRequest のインスタンスを作る際に、cachepolicy で、取得データをキャッシュするようになっていました。
このため、2 回目以降のデータ読み込みが一瞬で終わってネットワークインジケーターが非表示になるため、結果として、ネットワークインジケーターが表示されないという状況に見舞われました。
[ もどる ]