wake-up-neo.com

Wie können wir in einem NSDictionary speichern? Was ist der Unterschied zwischen NSDictionary und NSMutableDictionary?

Ich entwickle eine Anwendung, in der ich ein NSDictionary verwenden möchte. Kann mir jemand bitte einen Beispielcode senden, der die Vorgehensweise bei der Verwendung von NSDictionary zum Speichern von Daten mit einem perfekten Beispiel erläutert?

68

Die Dokumente NSDictionary und NSMutableDictionary sind wahrscheinlich die beste Wahl. Sie haben sogar einige großartige Beispiele, wie man verschiedene Dinge macht, wie ...

... ein NSDictionary erstellen

NSArray *keys = [NSArray arrayWithObjects:@"key1", @"key2", nil];
NSArray *objects = [NSArray arrayWithObjects:@"value1", @"value2", nil];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects 
                                                       forKeys:keys];

... darüber iterieren

for (id key in dictionary) {
    NSLog(@"key: %@, value: %@", key, [dictionary objectForKey:key]);
}

... mach es veränderlich

NSMutableDictionary *mutableDict = [dictionary mutableCopy];

Hinweis: Historische Version vor 2010: [[dictionary mutableCopy] autorelease]

... und ändern Sie es

[mutableDict setObject:@"value3" forKey:@"key3"];

... dann in eine Datei speichern

[mutableDict writeToFile:@"path/to/file" atomically:YES];

... und wieder zurücklesen

NSMutableDictionary *anotherDict = [NSMutableDictionary dictionaryWithContentsOfFile:@"path/to/file"];

... einen Wert lesen

NSString *x = [anotherDict objectForKey:@"key1"];

... prüfe ob ein Schlüssel existiert

if ( [anotherDict objectForKey:@"key999"] == nil ) NSLog(@"that key is not there");

... mit furchterregender futuristischer Syntax

Ab 2014 können Sie einfach dict [@ "key"] anstatt [dict objectForKey: @ "key"] eingeben

191
Tim
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];
32
Ben Gottlieb

Der Hauptunterschied: NSMutableDictionary kann direkt geändert werden, NSDictionary nicht. Dies gilt für alle anderen NSMutable * -Klassen in Cocoa. NSMutableDictionary ist eine Unterklasse von NSDictionary, sodass Sie mit NSDictionary alles tun können, was Sie mit beiden tun können. NSMutableDictionary fügt jedoch auch ergänzende Methoden hinzu, um vorhandene Elemente zu ändern, z. B. die Methode setObject:forKey:.

Sie können wie folgt zwischen den beiden konvertieren:

NSMutableDictionary *mutable = [[dict mutableCopy] autorelease];
NSDictionary *dict = [[mutable copy] autorelease]; 

Möglicherweise möchten Sie Daten speichern, indem Sie sie in eine Datei schreiben. NSDictionary bietet dazu eine Methode (die auch mit NSMutableDictionary funktioniert):

BOOL success = [dict writeToFile:@"/file/path" atomically:YES];

Um ein Wörterbuch aus einer Datei zu lesen, gibt es eine entsprechende Methode:

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:@"/file/path"];

Wenn Sie die Datei als NSMutableDictionary lesen möchten, verwenden Sie einfach:

NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile:@"/file/path"];
18
jtbandes