2013-03-19 3 views
0

App Vue d'ensemble:NSDictionary et NSUserDefaults comme stockage de données?

Un utilisateur peut effectuer des tests de vitesse d'Internet et d'autres types de tests avec des résultats variés. Généralement, les résultats d'un test sont stockés dans NSArrays et NSStrings.

Objectif:

Je suis en train de créer un système d'historique qui permet à l'utilisateur de revenir en arrière et voir des résultats passés.

Problème:

Je vais avoir du mal à comprendre quel support de stockage à utiliser et comment tout cela devrait tenir ensemble.

Existe-t-il un moyen de nommer NSUserDefaults en utilisant une valeur String ou Integer? Par exemple, j'ai une chaîne appelée "hisName" avec une valeur de "history1", serait-il possible de nommer le NSUserDefaults * hisName mais le faire revenir à la valeur history1? L'idée étant qu'à chaque test, les incréments de nombre et les nouveaux paramètres par défaut sont créés (history2, history 3, etc.).

Dans la version Android de cette application, c'est possible. Ainsi, l'application crée simplement "History-X" à la volée en fonction du nombre maximum d'historique autorisé. Lorsque le maximum est atteint, le premier est écrasé.

MISE À JOUR:

Je vais essayer un peu plus difficile d'expliquer ce que je veux en venir.

L'utilisateur termine un test et stocke toutes les données requises dans un fichier NSUserDefaults/NSDictionary nommé History1. Je puis ensuite incrémenter la valeur d'un nombre entier appelé HistoryCount à 2. Maintenant, lorsque l'utilisateur effectue un autre test, je veux appeler le NSUserDefaults/NSDictionary "History2" où le 2 vient de l'Integer HistoryCount. Je ne trouve pas un moyen de nommer NSUserDefaults/NSDictionary avec un NSString, etc.

+0

pouvez-vous élaborer 'revenir à la valeur history1' – Rakesh

+0

n'est pas sqlite ou de stockage de données de base plus approprié pour ce que vous essayez d'accomplir! – ahmad

+0

@Dan: Vous pouvez stocker une chaîne avec la valeur @ "history" pour la clé @ "hisName". Quel est le problème?Pour incrémenter la valeur de la chaîne, vous devrez implémenter votre propre logique. Et pour ce faire, pourquoi avez-vous besoin d'un dictionnaire? – Rakesh

Répondre

0

Utilisez cette méthode pour enregistrer le dictionnaire;

-(void)saveDefaults:(int)historyCount{ 
    NSDictionary *history1 = [NSDictionary dictionary]; //You already have this dictionary 
    NSString *historyKey = [NSString stringWithFormat:@"history%d",historyCount]; 
    [[NSUserDefaults standardUserDefaults] setObject:history1 forKey:historyKey]; 
} 

Votre code pourrait ainsi ressembler à ceci;

self.historyCount =1; 

[user runTest]; //first run 
[user saveDefaults:self.historyCount]; 
self.historyCount++; 


[user runTest]; 
[user saveDefaults:self.historyCount]; 
self.historyCount++; 

et ainsi de suite ..

Si vous souhaitez plusieurs objets du dictionnaire de l'histoire pour le même utilisateur, vous pouvez enregistrer le groupe d'objets d'histoire comme un tableau (indice d'utilisation pour accéder aux objets d'histoire) ou vous pourrait utiliser un dictionnaire avec la clé comme @"history1" et la valeur, le history1 dictionnaire. Vous pouvez générer de nouvelles clés comme indiqué ci-dessus. Mais si vous avez plusieurs utilisateurs et de nombreux objets d'historique pour chaque utilisateur, il peut être difficile de garder une trace. Au lieu de cela, vous pouvez utiliser core-data pour la persistance/la gestion des objets.

Questions connexes