Je ne pense pas que vous ayez besoin de vous arracher les cheveux.
Je pense que le modèle de base est le suivant :
(a) Indépendamment du Game Center, votre jeu dispose d'un état sauvegardé (dont vous avez toujours besoin de toute façon, pour remettre le joueur à l'endroit où il se trouvait lorsque votre jeu est quitté ou mis en arrière-plan). Cet état doit contenir tous les éléments normaux dont vous avez besoin pour restaurer l'état de votre jeu, ainsi que des drapeaux pour tous les succès de votre jeu.
(b) Le Game Center stocke également toutes les réalisations de votre jeu. Lorsque vous vous connectez au Game Center, vous téléchargez les succès du joueur connecté. (Des complications surviennent quant à qui le joueur connecté l'est, mais votre question ne porte pas sur ce point, alors supposons que le "seul vrai joueur" est toujours le joueur connecté au Game Center).
(c) Chaque fois que le joueur réalise un exploit, mettez d'abord à jour l'indicateur d'exploit approprié dans les données d'état sauvegardées de votre jeu. Ensuite, essayez d'informer le Game Center de cette réussite. Si cela fonctionne, mettez à jour votre copie des réalisations du Game Center avec les nouvelles données.
(d) Si cela ne fonctionne pas, vous avez une réalisation marquée dans votre état persistant qui n'est pas marquée dans votre copie de l'état du Game Center. À différents moments opportuns (par exemple, lorsqu'une autre réalisation est obtenue, lorsque vous terminez un niveau, lorsque votre application démarre, lorsque vous quittez l'application, etc.), vérifiez s'il existe des divergences entre ce qui se trouve dans votre propre état et ce qui se trouve dans l'état du Game Center. Une divergence est une mise à jour que vous devez renvoyer au Game Center. Essayez de l'envoyer, mais si cela échoue à nouveau, attendez la prochaine occasion (par exemple, lorsqu'un autre succès est obtenu, lorsque vous terminez un niveau, lorsque votre application démarre, lorsque vous quittez l'application, etc. Vous ne perdrez jamais ces données car elles se trouvent dans votre image locale et réelle de l'état de l'utilisateur. (Le seul moyen de les perdre est que l'utilisateur désinstalle votre application avant que vous n'ayez réussi à la faire entrer dans le Game Center, mais alors, que pouvez-vous faire).