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?
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
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];
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"];