2016-05-10 5 views
0

まず、私はインターネットへのアクセス可能性を求めていません。
私は、アプリケーションのさまざまな場所で多くのインターネットリクエストを受けています。ステータスバーにActivityIndi​​catorを表示したいが、設定したくない。私はiOSでインターネットを使用していますか?

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES/NO 

毎回。
私のアプリケーションがインターネットを使用していることを検出できる方法はありますか(フック方法など)
ありがとうございます!

+3

すべてのネットワーク処理を行う1つのクラス、NetworkControllerが必要です。このクラスは、クラス内の他のすべてが使用する1つのメソッドを持つ必要があります。このメソッドは 'networkActivityIndi​​catorVisible'を設定するのに適しています。 – vikingosegundo

+0

素晴らしいアイデア! "NetworkController"クラスを継承することができない第三者静的ライブラリを使用する必要があるとします。だからここに新しい問題がある。 – Meonardo

+0

[継承上の合成](https://en.wikipedia.org/wiki/Composition_over_inheritance):NetworkControllerは、ライブラリからクラスを継承しないクラスを所有します。 – vikingosegundo

答えて

1

悲しいことに、私が時代遅れでない限り、これはあなた自身の責任です。飛行中のネットワーク通信量のゲッターはなく、変更を監視するために観察できる通知やオブジェクトもありません。あなただけのNSURLSessionを使用していた、あなたはパラメータとしてフォームvoid (^)(NSURL *location, NSURLResponse *response, NSError *error)のブロックを取り、それがグローバルな活動カウントをインクリメントし、元とを呼び出し、同じ形の別のブロックを返す関数、YAURLCompletionForCompletionを実装するかもしれないと仮定すると

カウンタをデクリメントする。

カウンタがゼロでないときはいつでもスピナーを表示します。 NSURLSessionDataTaskを作成するときに渡す補完ハンドラをすべてラップするには、常にYAURLCompletionForCompletionを使用します。

+0

これは本質的に私たちが行うことです。メインスレッドのカウンタをインクリメントまたはデクリメントするか、アトミック演算子を使用するように注意する必要があります。どちらの場合も、メインスレッドのみで 'networkActivityIndi​​catorVisible'を設定してください。 – EricS

関連する問題