Je développe une application dans laquelle je veux utiliser un NSDictionary
. Quelqu'un peut-il m'envoyer un exemple de code expliquant la procédure à suivre pour utiliser un NSDictionary
pour stocker des données avec un exemple parfait?
Les docs NSDictionary et NSMutableDictionary sont probablement votre meilleur choix. Ils ont même d'excellents exemples sur la façon de faire diverses choses, comme ...
... créer un NSDictionary
NSArray *keys = [NSArray arrayWithObjects:@"key1", @"key2", nil];
NSArray *objects = [NSArray arrayWithObjects:@"value1", @"value2", nil];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects
forKeys:keys];
... parcourez-le
for (id key in dictionary) {
NSLog(@"key: %@, value: %@", key, [dictionary objectForKey:key]);
}
... rendez-le mutable
NSMutableDictionary *mutableDict = [dictionary mutableCopy];
Remarque: version historique antérieure à 2010: [[dictionary mutableCopy] autorelease]
... et modifiez-le
[mutableDict setObject:@"value3" forKey:@"key3"];
... puis enregistrez-le dans un fichier
[mutableDict writeToFile:@"path/to/file" atomically:YES];
... et relisez-le
NSMutableDictionary *anotherDict = [NSMutableDictionary dictionaryWithContentsOfFile:@"path/to/file"];
... lit une valeur
NSString *x = [anotherDict objectForKey:@"key1"];
... vérifier si une clé existe
if ( [anotherDict objectForKey:@"key999"] == nil ) NSLog(@"that key is not there");
... utilise une syntaxe effrayante et futuriste
À partir de 2014, vous pouvez taper simplement dict [@ "key"] plutôt que [dict objectForKey: @ "key"]
NSDictionary *dict = [NSDictionary dictionaryWithObject: @"String" forKey: @"Test"];
NSMutableDictionary *anotherDict = [NSMutableDictionary dictionary];
[anotherDict setObject: dict forKey: "sub-dictionary-key"];
[anotherDict setObject: @"Another String" forKey: @"another test"];
NSLog(@"Dictionary: %@, Mutable Dictionary: %@", dict, anotherDict);
// now we can save these to a file
NSString *savePath = [@"~/Documents/Saved.data" stringByExpandingTildeInPath];
[anotherDict writeToFile: savePath atomically: YES];
//and restore them
NSMutableDictionary *restored = [NSDictionary dictionaryWithContentsOfFile: savePath];
La principale différence: NSMutableDictionary peut être modifié sur place, NSDictionary ne peut pas. Cela est vrai pour toutes les autres classes NSMutable * de Cocoa. NSMutableDictionary est une sous-classe de NSDictionary, de sorte que tout ce que vous pouvez faire avec NSDictionary est réalisable avec les deux. Cependant, NSMutableDictionary ajoute également des méthodes complémentaires pour modifier les éléments en place, telles que la méthode setObject:forKey:
.
Vous pouvez convertir entre les deux comme ceci:
NSMutableDictionary *mutable = [[dict mutableCopy] autorelease];
NSDictionary *dict = [[mutable copy] autorelease];
Vous voulez probablement stocker des données en les écrivant dans un fichier. NSDictionary a une méthode pour le faire (qui fonctionne aussi avec NSMutableDictionary):
BOOL success = [dict writeToFile:@"/file/path" atomically:YES];
Pour lire un dictionnaire depuis un fichier, il existe une méthode correspondante:
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:@"/file/path"];
Si vous voulez lire le fichier en tant que NSMutableDictionary, utilisez simplement:
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile:@"/file/path"];