Continuer l'opération lorsque l'application est input en arrière-plan sur iOS

dans mon application j'ai NSOperation qui met à jour un élément de données de base d'une database en ligne, parfois la mise à jour nécessite quelques minutes, et quand l'écran de l'iPhone se verrouille, l'application entre en mode d'arrière-plan, pour rouvrir l'application pour continuer la mise à jour, j'ai donc beaucoup cherché sur le débordement de la stack et j'ai trouvé quelques informations sur:

beginBackgroundTaskWithExpirationHandler 

C'est une méthode de Apple qui permet de continuer une tâche aussi quand l'application est en mode d'arrière-plan, et je fais ceci:

 - (void)applicationDidEnterBackground:(UIApplication *)application { UIApplication *app = [UIApplication sharedApplication]; UIBackgroundTaskIdentifier bgTask; bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ [app endBackgroundTask:bgTask]; }]; } 

et maintenant l'application continue la tâche en arrière-plan, et semble que tout fonctionne bien, alors ma question est, cette méthode que j'utilise est sûre? ou il y a un meilleur mode?

Merci

Ce n'est pas comme ça que tu fais ça. Tout code que vous souhaitez exécuter en arrière-plan doit être correctement enveloppé. Quelque chose comme ça:

 - (void)someMethodToKeepRunningInBackground { UIBackgroundTaskIdentifier taskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(void) { // Uh-oh - we took too long. Stop task. }]; // Perform task here if (taskId != UIBackgroundTaskInvalid) { [[UIApplication sharedApplication] endBackgroundTask:taskId]; } } 

Vous ne faites rien dans la méthode UIApplicationDelegate applicationDidEnterBackground:

Toute tâche qui est enveloppée dans les appels de "tâche de fond" sera autorisée à continuer à fonctionner lorsque l'application entre en arrière-plan.

Voici la partie vraiment importante – la tâche ne dure que 10 minutes maximum. Si elle est toujours en cours d'exécution après 10 minutes, votre application sera terminée. Le gestionnaire d'expiration vous donne quelques secondes pour terminer proprement la tâche avant que l'application ne soit mal terminée.