Je crée une application, avec un magasin de données dans Plist. Maintenant, quelles sont les façons dont je peux mettre à jour les données? Peut-être que si je crée une page Web et récupère mes données au lieu de stocker dans plist? Ou y a-t-il un moyen de mettre à jour mes données lorsque je me branche sur iTunes? Ou toute autre suggestion? Ce que je veux réaliser est une manière de mettre à jour mes données une fois que l'utilisateur a téléchargé l'application.Comment puis-je mettre à jour des données dans l'application iPhone
Répondre
Les plistes ne sont pas facilement modifiables car vous devez les relire en mémoire, apporter les modifications et les réécrire dans le fichier.
Pour l'écriture des plistes, consultez la méthode NSDictionary ou NSArray writeToFile:atomically:
. Rappelez-vous que votre plist est essentiellement un XML composé de NSArrays, NSDictionaries, NSStrings et NSData, et vous voudrez toujours écrire le nœud racine.
Vous pouvez également rechercher d'autres moyens de stocker vos données: valeurs par défaut utilisateur ou bases de données sqlite. Le stockage des données dans le cloud n'a de sens que dans certains cas, par exemple si vous souhaitez le partager entre différents appareils ou si vous souhaitez le mettre à jour à distance. Il est préférable de l'éviter si possible.
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *dir = [path objectAtIndex:0];
NSString *filePath = [dir stringByAppendingPathComponent:@"my.plist"];
NSMutableDictionary *localDictionary;
NSUrl *remoteUrl = [NSURL URLWithString:@"http://server.com/my.plist"];
NSMutableDictionary *remoteDictionary = [NSMutableDictionary dictionaryWithContentsOfURL:remoteUrl];
if(remoteDictionary != nil) {
[remoteDictionary writeToFile:filePath atomically:YES];
localDictionary = remoteDictionary;
}
else {
localDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:filePath];
if(localDictionary == nil) localDictionary = [NSMutableDictionary dictionary];
}
Cela va essayer d'obtenir une copie de my.plist
de http://server.com/
, en cas de succès il écrire sur le disque et le point localDictionary
à elle, en cas d'erreur, il va essayer de lire à partir du disque (par exemple téléchargé plus tôt quand il y avait une connexion), s'il n'y a pas de fichier sur le disque, il créera un NSMutableDictionary
vide. De toute façon localDictionary
pointera vers un NSMutableDictionary
à la fin.
Ceci est très simple et demandera le fichier chaque fois que le code est exécuté. Vous pourriez, par exemple, utilisez NSFileModificationDate
(obtenu par NSFileManger attributesOfItemAtPath:error:
) et NSDate
pour déterminer si une mise à jour est nécessaire. Ou pour les gros fichiers, la version aurait un sens, avec un petit fichier contenant la version du plus gros fichier - obtenant le petit fichier du serveur (par exemple avec NSString
), vérifiant si le fichier de version en cache contient un numéro de version inférieur, obtenir le gros fichier. Cela dépend toujours de la fréquence à laquelle le contenu est actualisé.
Voir la documentation complète: NSDictionary, NSString, NSFileManager, NSDate
Salut, my.plist est le fichier de la page Web ou? Désolé, je suis encore nouveau à cela. Le serveur est-il un service gratuit? Merci pour l'aide – Stefan
my.plist est juste un fichier plist (voir http://en.wikipedia.org/wiki/Property_list) qui est très pratique à utiliser pour les petites quantités de données puisque vous pouvez sérialiser et l'écrire dans un fichier avec seulement une commande et inverser le processus dans une commande aussi bien. Un serveur est quelque chose que vous devez obtenir vous-même, normalement vous auriez besoin d'un domaine aussi (peut-être 2 sous-domaines qui peuvent être routés vers un serveur différent au cas où l'un tombe en panne). Au lieu d'un serveur Web (http), vous pouvez également utiliser un serveur FTP. Si vous avez besoin d'aide pour cela, vous devriez demander ailleurs car l'hébergement n'est pas programmé. – Thomas
Il est préférable de bien faire et ne pas l'éviter. Par exemple. mettre à jour les données chaque fois qu'il y a une connexion et une mise à jour et que le cache localement. Stocker la version des données ou la date de mise à jour dans un plist avec un 'NSMutableDictionary'. – Thomas
Salut je voudrais mettre à jour à distance. Peut-être quelque chose comme, je peux envoyer une alerte indiquant à l'utilisateur une mise à jour est disponible, etc. Ou, comme l'application YouTube, comment stocke-t-il/récupère-t-il toutes les données? – Stefan
Salut Thomas comment puis-je réaliser la méthode que vous suggérez? – Stefan