5

アプリケーション デリゲートの didFinishLaunchingWithOptions で、バックグラウンド フェッチのためにアプリケーションが起動されたかどうかを確認したいと考えています。launchOptions ディクショナリには何もありません。それで、それを確認する方法はありますか?

を確認できることはわかってapplicationStateいますが、アプリを正常に起動しても、何らかの理由で UIApplicationStateBackground が返されることがあります。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    if (application.applicationState != UIApplicationStateBackground) {
    // Analytics initialization code
    }
}

Analytics の初期化コードにブレークポイントを作成したところ、アプリを正常に起動してもこのブロックに入ることがある!

applicationDidBecomeActiveいつ、またはapplicationDidEnterBackground呼び出されるかを後で検出できることを知っています。これらのアプローチを使用して状態を検出する場合は、Analytics の初期化コードを別の場所に移動する必要があります。残ってapplication:didFinishLaunchingWithOptions:いると、アプリがバックグラウンド フェッチを開始するたびに呼び出されます。applicationStateでは、Analytics の初期化コードを別のメソッドに移動し、チェックインしないようにする必要がありapplication:didFinishLaunchingWithOptions:ますか? もしそうなら、私はこれにどの方法を使うことができますか?

4

4 に答える 4

0

これを試してみてください

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

        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(AppIsActive:)
                                                     name:UIApplicationDidBecomeActiveNotification
                                                 object:nil];

セレクターを呼び出す必要があります: NSNotificationCenter は AppIsInBackground セレクター (バックグラウンドのアプリ) を呼び出しています

- (void) AppIsInBackground:(NSNotification *) notification {
 //Shut down the memory/processor intensive things and save any states for when the app is reinitialized
}
于 2015-02-09T16:09:33.930 に答える