Je sais que UserDefaults est simplement destiné à enregistrer les préférences, mais ces préférences sont persistantes - les valeurs enregistrées dans UserDefaults sont maintenues sur un nombre illimité de lancements d'applications et sont toujours disponibles pour être lues tant que l'application reste installée ... droite?Est-il possible que les valeurs UserDefaults.standard ne soient pas disponibles pour être lues?
Est-il possible que ces valeurs soient effacées ou ne soient pas correctement accessibles à tout moment? Après des années d'utilisation de UserDefaults et en fonction de la cohérence des valeurs qu'ils contiennent, j'ai vu deux fois dans une journée de travail que lorsque mon application a lancé et vérifié une valeur booléenne simple, la valeur n'était pas correcte.
if defaults.bool(forKey: "beenLaunched") {
Ce code s'exécute chaque fois que l'application est lancée. Si la valeur est true, je ne fais rien de plus, mais si c'est faux, je mets quelques valeurs car c'est le tout premier lancement de l'application par l'utilisateur puis j'appelle defaults.set (true, forKey: "beenLaunched") et defaults.set (0, forKey: "eventsCompleted") et quelques autres valeurs. J'ai trouvé this thread on the Apple forums dans lequel Eskimo disait "Pour la méthode centrale NSUserDefaults, -objectForKey :, un résultat de zéro signifie que la valeur est indisponible, mais il n'y a aucun moyen de distinguer cette clé et cette valeur peut être ' t être récupéré car les valeurs par défaut de l'utilisateur sont hors ligne. " (Cela semble être en référence à un cas spécifique de background launching while a device is locked)
Je peux trouver un moyen plus sûr d'enregistrer des données simples comme une valeur Bool, un Int, ou une chaîne, mais en utilisant UserDefaults pour ces types de Les valeurs ont toujours été simples, directes et fiables. Quelqu'un peut-il intervenir sur le sujet et si j'avais tort de croire à la persistance de UserDefaults?
Merci!
Avez-vous appelé 'NSUserDefaults :: synchronize()' après avoir défini les valeurs? – Brandon
Vous avez utilisé le framework Cocoa depuis 17 ans et ce n'est * pas * comment ça marche. :-) Je n'ai pas pris la peine de lire ce fil mais non, ça ne sera jamais "hors ligne" (même pas sûr de ce que ça veut dire *). –
@Brandon non, je n'appelle généralement pas de synchronisation, mais n'a jamais eu de problème – RanLearns