3

私は、インターネットに接続しているときとそうでないときに、いくつかのことを行う必要があるiOSアプリケーションを開発しています。まだ行っていない場合は、インターネットを提供して戻ってくるようにユーザーにメッセージを表示します。問題は、次の状況をどのように検出するかです。

  • ユーザーがホームボタンを2回押して、マルチタスク、設定に移動し、インターネットに接続します
  • ユーザーは私のアプリにマルチタスクで戻ってきますが、何も押さない

AppDelegateへのコールバックを受け取ることはわかっています。

- (void)applicationDidEnterBackground:(UIApplication *)application
- (void) applicationDidBecomeActive:(UIApplication *)application

しかし、コード(私が始めたものではありません)は非常に大きく、代替手段がある場合は、UIViewControllerが必要とするコードを処理したくありません。

私のUIViewControllerの-(void)viewDidAppear:(BOOL)animatedは、ユーザーが戻ってきたときに呼び出されません。

スクリーンショット

確実にヒットしないブレークポイント!

AppDelegateを除いて、使用可能なアイデアはありますか?

4

2 に答える 2

7

通知センターを使用して、ViewControllerapplicationDidEnterBackground内でリッスンできます。

[[NSNotificationCenter defaultCenter] addObserver: self
                                      selector: @selector(handleEnteredBackground:) 
                                      name: UIApplicationDidEnterBackgroundNotification
                                      object: nil];

でこれを行いviewDidLoadます。同様にapplicationDidBecomeActive

のオブザーバーとして自分自身を削除することを忘れないでくださいviewDidUnload

于 2012-09-04T15:45:44.753 に答える
2

アプリケーションデリゲートは、アプリケーションの状態の変化を処理するための正しい場所ですが、それが事実であるという理由だけで、アプリケーションの状態の変化によってトリガーされるすべてのロジックをそこに配置する必要があるという意味ではありません。

それが属するロジックを配置します。ネットワークコードの場合、それはアプリケーションデリゲートになく、View Controllerにもありません。それは、別のクラスにあります。次に、アプリケーションのさまざまな部分を結び付ける方法を調べます。ほとんどの場合、通知、KVO、および共有インスタンスパターンが適切なアプローチです。

于 2012-09-04T15:45:54.020 に答える