Je suis en train de développer une application dans laquelle je veux utiliser un fichier de type NSDictionary
. Quelqu'un peut-il m'envoyer un exemple de code expliquant la procédure d'utilisation d'une NSDictionary
pour stocker des données avec un exemple parfait ?
Réponses
Trop de publicités?Le site NSDictionary et NSMutableDictionary Les docs sont probablement votre meilleure chance. Ils ont même de bons 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];
...itérer sur elle
for (id key in dictionary) {
NSLog(@"key: %@, value: %@", key, [dictionary objectForKey:key]);
}
...le rendre mutable
NSMutableDictionary *mutableDict = [dictionary mutableCopy];
Note : version historique avant 2010 : [[dictionnaire mutableCopy] autorelease]
...et le modifier
[mutableDict setObject:@"value3" forKey:@"key3"];
...puis le stocker dans un fichier
[mutableDict writeToFile:@"path/to/file" atomically:YES];
...et le relire à nouveau
NSMutableDictionary *anotherDict = [NSMutableDictionary dictionaryWithContentsOfFile:@"path/to/file"];
...lire une valeur
NSString *x = [anotherDict objectForKey:@"key1"];
...vérifier si une clé existe
if ( [anotherDict objectForKey:@"key999"] == nil ) NSLog(@"that key is not there");
...utiliser une syntaxe futuriste effrayante
Depuis 2014, vous pouvez en fait simplement taper 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 différence essentielle : NSMutableDictionary peut être modifié sur place, NSDictionary ne le peut pas. . Ceci est vrai pour toutes les autres classes NSMutable* de Cocoa. NSMutableDictionary est un sous-classe de NSDictionary, donc tout ce que vous pouvez faire avec NSDictionary, vous pouvez le faire avec les deux. Cependant, NSMutableDictionary ajoute également des méthodes complémentaires pour modifier les choses en place, comme la méthode setObject:forKey:
.
Vous pouvez convertir les deux comme suit :
NSMutableDictionary *mutable = [[dict mutableCopy] autorelease];
NSDictionary *dict = [[mutable copy] autorelease];
On peut supposer que vous voulez stocker des données en les écrivant dans un fichier. NSDictionary dispose d'une méthode pour ce faire (qui fonctionne également 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 comme un NSMutableDictionary, utilisez simplement :
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile:@"/file/path"];