J'ai regardé les réponses aux questions concernant l'exécution des sauvegardes de données de base en arrière-plan, mais aucune des réponses que j'ai trouvées n'a directement abordé le scénario suivant :
J'ai configuré les données de base de telle sorte que lorsque mon application est lancée pour la première fois, les données de base sont peuplées à partir d'un fichier plist, puis enregistrées dans le magasin persistant (tout cela sur un thread arrière-plan). Pendant ce temps, l'application affiche une fenêtre contextuelle "veuillez patienter" avec un indicateur d'activité animé. Cela semble bien fonctionner et en général l'application terminera le peuplement même si l'utilisateur appuie sur le bouton d'accueil pendant le peuplement, poussant l'application en arrière-plan. Cependant, il est possible que l'application puisse être complètement terminée avant que ce peuplement se termine (j'ai réussi à le faire en appuyant sur le bouton d'accueil, en double-cliquant sur le bouton d'accueil, et en supprimant l'application du bac multi-tâches très rapidement). Dans ce scénario, l'application se ferme sans enregistrer les données dans le magasin. Lors du prochain lancement de l'application, l'application reconnaît que le magasin existe déjà, donc elle ne se peuple pas, laissant ainsi l'utilisateur avec une base de données complètement vide. Alors la ou les question(s) est/sont :
-
Y a-t-il un moyen de supprimer complètement le magasin à la fermeture de l'application si le peuplement n'est pas terminé? J'ai essayé de le faire dans
-applicationWillTerminate:
ce qui ne semblait pas reconnaître correctement si l'application était en train de se peupler. -
Ou, y a-t-il un meilleur moyen de reconnaître quand le magasin nécessite un peuplement ? Par exemple, puis-je déterminer si le magasin est vide au démarrage ?