Ich entwickle eine Anwendung, in der ich eine verwenden möchte NSDictionary
. Kann mir bitte jemand einen Beispielcode senden, in dem die Vorgehensweise NSDictionary
zum Speichern von Daten anhand eines perfekten Beispiels erläutert wird ?
iphone
objective-c
nsdictionary
nsmutabledictionary
Pradeep Reddy Kypa
quelle
quelle
Antworten:
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 ändere es
[mutableDict setObject:@"value3" forKey:@"key3"];
... dann in einer Datei speichern
[mutableDict writeToFile:@"path/to/file" atomically:YES];
... und lies es noch einmal zurück
NSMutableDictionary *anotherDict = [NSMutableDictionary dictionaryWithContentsOfFile:@"path/to/file"];
... einen Wert lesen
NSString *x = [anotherDict objectForKey:@"key1"];
... prüfen, ob ein Schlüssel vorhanden ist
if ( [anotherDict objectForKey:@"key999"] == nil ) NSLog(@"that key is not there");
... verwenden Sie eine beängstigende futuristische Syntax
Ab 2014 können Sie tatsächlich nur dict [@ "key"] anstelle von [dict objectForKey: @ "key"] eingeben.
quelle
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];
quelle
NSString *savePath = [@"~/Documents/Saved.data" stringByExpandingTildeInPath];
, jetzt ist meine Frage, was ist dieSaved.data
Datei hier? Wie kann ich es schaffen?Supporting files > MediaFiles > Documents > userData.rtf
gestellt. Kann ich diese Art von Mutabledictionary-Daten jetzt in einer Textdatei speichern? Und was ist in diesem Fall das perfekte Verzeichnis? Ich war mit diesem Versuch[userData writeToFile:@"MediaFiles/Documents/userData.rtf" atomically:YES];
und mit diesem[userData writeToFile:@"Documents/userData.rtf" atomically:YES];
, aber hat nicht funktioniert. Haben Sie einen guten Tag.Der Hauptunterschied: NSMutableDictionary kann an Ort und Stelle geändert werden, NSDictionary nicht . Dies gilt für alle anderen NSMutable * -Klassen in Cocoa. NSMutableDictionary ist eine Unterklasse von NSDictionary. Alles, was Sie mit NSDictionary tun können, können Sie mit beiden tun. NSMutableDictionary fügt jedoch auch ergänzende Methoden hinzu, um vorhandene Elemente zu ändern, z. B. die Methode
setObject:forKey:
.Sie können zwischen den beiden wie folgt konvertieren:
NSMutableDictionary *mutable = [[dict mutableCopy] autorelease]; NSDictionary *dict = [[mutable copy] autorelease];
Vermutlich möchten Sie Daten speichern, indem Sie sie in eine Datei schreiben. NSDictionary hat eine Methode, um dies zu tun (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"];
quelle