2017-03-15 12 views
0

ジオフェンシングデリゲートメソッドdidExitRegionとすべてのアプリケーション状態(前景/背景/懸濁し、倒した状態)のために働いてdidEnterRegion殺さ/サスペンド状態からウェイクアップ後3つの同期のAPI。いずれかの領域が一度通過すると、アプリケーションは3つの相互依存するAPIを同期してヒットする必要があります。すべてがフォアグラウンド状態で正常に動作していますが、は中断/強制終了状態ではありません。この失敗の正確な理由を知らないでください。火災アプリケーションが

このような場合(kill/suspended状態)のすべてのタスクを実行するために、1つの理由が起床時間制限に制限される場合があります。私は試しましたbeginBackgroundTaskWithExpirationHandlerが、私を助けていません。

- (void) beginBackgroundUpdateTask{ 

    _backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ 
     [self endBackgroundUpdateTask]; 
    }]; 
} 

- (void) endBackgroundUpdateTask{ 

    [[UIApplication sharedApplication] endBackgroundTask:_backgroundTask]; 
    _backgroundTask = UIBackgroundTaskInvalid; 
} 


- (void)locationManager:(CLLocationManager *)manager 
     didEnterRegion:(nonnull CLRegion *)region 
{ 
    [kSharedAppDelegate beginBackgroundUpdateTask]; 

    NSString *locId = [region.identifier substringFromIndex:1]; 
    Recipe *recipe = [Recipe getSelectedReturnRecipeForLocationId:locId]; 
    if(recipe) 
    { 
     [self callAPIOne:^(NSDictionary *dictResponse) { 

      [self callAPITwo:params forAbc:NO]; 

     } withFailed:^(NSDictionary *dictResponse) { 
       [kSharedAppDelegate endBackgroundUpdateTask]; 
     } showLoader:NO]; 
    } 
    else 
     [kSharedAppDelegate endBackgroundUpdateTask]; 
} 

私がここで間違っていることについて助言をお持ちの方は、助けてください。先にありがとう

+0

あなたが完了したら、 'アップデートのすべてをendBackgroundUpdateTask'を呼び出して、最終的な完成ハンドラからそれを呼び出す必要が – Paulw11

+0

@ Paulw11はい、私は一度、すべてのタスクがcallAPITwo内に完了endBackgroundUpdateTask、呼ばれています: – Yogendra

+0

あなたはアプリを入れて、pushkitを参照さ持っているがAppleからの事前の許可を得て特定のカテゴリであなたを許可します。 – Hasya

答えて

0

私はこのコードを上記のでクリアするだけで、このような作業には十分です。上記のコードでは、すべての必要なタスクがすべてのアプリケーション状態(フォアグラウンド/バックグラウンド/強制終了/中断)で機能しています。

私の問題はコアデータの実装にありました。レシピオブジェクトがなくなると、私はさらなるコードをスキップしていました。それは、死んだ状態の制限された時間制限のために、APIが起動しないように感じます。

上記のコードは、同じ問題で他の人に役立つことがあります。