Comment savoir lorsque l'utilisateur a effectué une modification des paramètres.

StackOverflow https://stackoverflow.com/questions/5482573

  •  14-11-2019
  •  | 
  •  

Question

Je laisse l'utilisateur modifier leurs paramètres dans la zone Paramètres de l'iPhone.Lors de la prochaine synchronisation du réseau, je voudrais envoyer les modifications de l'utilisateur au serveur.Mais seulement si les changements sont faits.

Mais comment puis-je savoir lorsque l'utilisateur a modifié dans la zone Paramètres?

Si je peux, j'aimerais éviter une option d'envoi de toujours les informations, sans aucune modification ou non ou d'obtenir l'information du serveur d'abord et que la mise à jour est différente de la valeur par défaut de l'utilisateur.

Y a-t-il un moyen gentil et élégant de résoudre ce problème? Merci pour votre aide!

Une semaine plus tard et aucune réponse ... Cette question est-elle trop difficile ou cela n'a aucun sens du tout?

Était-ce utile?

La solution

ah stupide moi!Ici, nous allons avec une manière élégante.Recherchez des AppPrefs dans la documentation Apple dans Xcode et il affichera un exemple d'application qui fait exactement ce que vous voulez faire.Il suffit de compiler et de courir!Il utilise le NsuserdefaultSDidChangenotification .

Ceci est le code utilisé pour enregistrer un observateur:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(defaultsChanged:)
                                             name:NSUserDefaultsDidChangeNotification
                                           object:nil];


Ancienne réponse:

On ne ressemble pas comme si vous pouviez obtenir une date de modification hors des NSUserDefaults.Jusqu'à présent, je ne peux penser que de cette façon:

NSUserDefaults *previousDefaults = [someInstance previousUserDefaults];
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];

if([previousDefaults isEqualToDictionary:currentDefaults]) 
{
    [someOtherInstance sendModifiedUserDefaultsToServerWithDefaults:currentDefaults];
    [yetAnotherInstance saveModified]
}

Vous devez enregistrer votre utilisateur par défaut comme dictionnaire sur disque lorsque l'application est lancée la première fois: vos valeurs par défaut.Ensuite, chaque fois que l'application est ouverte, vous comparez ces deux dictionnaires.S'ils

Autres conseils

Ce n'est pas que la question est trop difficile, c'est juste qu'il n'y a pas un moyen simple de faire ce que vous demandez.NSUserDefaults n'enregistre pas une date "Dernière modification" pour les paramètres de chaque application, au moins aussi loin que possible, si l'utilisateur modifie certains paramètres à l'aide de l'application Paramètres, il n'y a pas de bon moyen de détecter cela autre que de regardertous les paramètres.

Si vous avez vraiment besoin de le faire, je pense que votre meilleur pari est de lire les paramètres que vous souhaitez synchroniser dans une structure de données et en calculant une sorte de hachage ou de somme de contrôle sur la base de cette structure.Comparez cette valeur à la valeur que vous avez calculée la dernière fois que l'application a couru et synchronisez avec le serveur s'il est différent.Vous pouvez stocker cette valeur dans NSUserDefaults si vous le souhaitez, mais assurez-vous de ne pas l'inclure dans le calcul.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top