web-dev-qa-db-fra.com

NSUserDefaults persiste-t-il lors d'une mise à jour d'une application dans l'Appstore?

Est-ce le cas? NSUserDefaults est-il réinitialisé lorsque vous soumettez une mise à jour à une application sur l'App Store, ou sont-ils réinitialisés?

Mon application se bloque lors de la mise à jour mais ne se bloque pas lors du téléchargement complet - j'essaie donc de déterminer ce qui pourrait être différent dans la session mise à jour de la session fraîchement téléchargée.

À la vôtre, Nick.

102
Nick Cartwright

Ils ne sont généralement pas réinitialisés, sauf si l'utilisateur supprime l'application. Pour les données de base, NSUserDefaults est le meilleur moyen d'enregistrer des données telles que les préférences, les dates, les chaînes, etc. Si vous cherchez à enregistrer des images et des fichiers, le système de fichiers est un meilleur pari.

112
coneybeare

Je crois que la réponse est OUI, elle persistera. Cela est également entièrement documenté dans le chapitre Répertoire d'applications du Apple iPhone OS Programming Guide.

7
leon
  1. Réponse directe à la question affichée: OUI.
  2. Votre problème: votre application se bloque en raison de problèmes de logique. Supposons que vous stockiez un objet par défaut et que l'application vérifie sa valeur au lancement (ou ailleurs). Dans votre mise à jour, vous pouvez modifier la façon dont elle est vérifiée ou utilisée, par ex. vous attendez une valeur, mais l'objet est nul, ou vice versa. Cela peut provoquer un SIGABRT ou EXC_BAD_ACCESS.
4
John Smith

Si vous aviez un modèle Core Data et que vous avez changé quelque chose dans votre modèle et votre mise à jour, sans gérer la migration, c'est probablement la raison pour laquelle votre application se bloque lors de la mise à jour ...

2
Bojan Bozovic

J'ai une expérience similaire. Notre application stocke un numéro de version dans Settings.Bundle/Root.Plist. Cela s'affiche via l'application Paramètres iPhone. Ce que nous constatons, c'est que lors d'une installation, le numéro de version est chargé à partir du bundle d'application - par conséquent, le numéro de version est correct. Lors d'une mise à jour, le numéro de version ne change pas. Cela donne l'impression que l'utilisateur exécute une version précédente de l'application. Nous n'avons pas de logique liée au numéro de version, c'est juste pour l'affichage (il pourrait être utilisé par le personnel du centre de contact lors du diagnostic des défauts).

Notre expérience est que NSUserDefaults n'est pas effacé lorsqu'un utilisateur met à jour notre application, mais l'affichage des paramètres n'est pas mis à jour non plus.

1
Derek Knight