61 votes

performFetchWithCompletionHandler ne se fait jamais virer

1) Ma configuration de plist pour fournir le mode de fond:

 <key>UIBackgroundModes</key>
<array>
    <string>fetch</string>
</array> 
 

2) En didFinishLaunchingWithOptions j'ai:

 [[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:1.0];
 

3) J'ai déclaré le protocole UIApplicationDelegate dans le délégué.

4) J'ai implémenté la méthode suivante, mais elle n'est jamais renvoyée. (Cela ne fonctionne que si je simule la récupération avec "XCode-> Debug-> Simuler la récupération en arrière-plan".)

 -(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
 

Pourquoi? Est-ce une erreur bêta DP5? Devrais-je radar cela?

107voto

Clay Bridges Points 3470

En mode de débogage Xcode 5, vous pouvez forcer une extraction en arrière-plan à partir du menu: Debug> Simuler une extraction en arrière-plan.

Fraise!

39voto

One Man Crew Points 5078

Je crains que ce est difficile de déboguer sur un appareil, car vous n'êtes pas garanti, il est appelé dans la quantité de temps que vous spécifiez.

setMinimumBackgroundFetchInterval signifie qu'il n'est pas appelé dans un intervalle qui est inférieure à la valeur spécifiée. Mais il n'y a pas d' setMaximumBackgroundFetchInterval. Donc, si iOS décide de faire appel à votre application une fois par jour ou même juste une fois par semaine qu'il ne sera pas appelé plus souvent, quel que soit votre minimumBackgroundFetchInterval. Autant que je sache, iOS décide quand appeler performFetchWithCompletionHandler mesurée par le patron quand et à quelle fréquence les utilisateurs de démarrage de l'application.

23voto

user2936585 Points 71

À l'aide de votre appareil, vous pouvez déclencher l'application: performFetchWithCompletionHandler en procédant comme suit:

  • Mettez votre application à l'état d'arrière-plan.
  • Verrouillez votre appareil et attendez 5 minutes. (Je sais, c'est une perte de temps, prenez un café)
  • Déverrouillez votre appareil, cela déclenchera la méthode.

23voto

user1700099 Points 74

(Cela ne fonctionne que si je simule la récupération avec "XCode-> Debug-> Simuler la récupération en arrière-plan".)

C'est parce que vous êtes en mode débogage. S'il vous plaît essayer de lancer l'application sans XCode.

5voto

Axeva Points 1391

Une autre chose à vérifier est votre fichier plist . Assurez-vous que la clé UIApplicationExitsOnSuspend n'est pas présente.

Sur Stack Overflow, de nombreuses personnes ont recommandé d'utiliser ce paramètre pour forcer le redémarrage de votre application à chaque lancement. Cela fonctionne, mais l’effet secondaire est qu’il empêche le déclenchement de la nouvelle fonctionnalité d’extraction d’arrière-plan iOS 7.

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