46 votes

PerformFetchWithCompletionHandler appelé deux fois lors de la simulation avec Xcode

Dans Xcode 7.0.1, la commande d'extraction "simuler l'arrière-plan" provoque le déclenchement de performFetchWithCompletionHandler deux fois.

S'agit-il d'une erreur de débogage Xcode ou cela peut-il se produire sur un périphérique exécutant une version validée de l'application?

Mise à jour Nous avons maintenant Xcode 7.1.1 et toujours performFetchWithCompletionHandler est appelé deux fois. Comme je ne suis pas sûr que cela se produise également "dans la nature", je garde un état si mon action d'extraction est déjà en cours d'exécution.

 - (void)application:(UIApplication *)application performFetchWithCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler {
    if (self.performingFetch) {
        return completionHandler(UIBackgroundFetchResultNoData);
    }
    self.performingFetch = YES;
    ...
    self.performingFetch = NO;
}
 

-1voto

Farhad Nežad Points 1683

Il s’agit là d’un bogue, mais voici un moyen de contourner le problème. Essayez d’appeler les completionHandler toutes les 20 secondes ou selon votre préférence.

Rapide:

 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 20), NSEC_PER_SEC) { () -> Void in
    completionHandler(UIBackgroundFetchResultNewData);
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X