4 Stimmen

iPhone NSArray aus Dictionary von Dictionary-Werten

Ich habe ein Dictionary of Dictionaries, das im JSON-Format an mich zurückgegeben wird

{
    "neverstart": {
        "color": 0, 
        "count": 0, 
        "uid": 32387, 
        "id": 73129, 
        "name": "neverstart"
    }, 
    "dev": {
        "color": 0, 
        "count": 1, 
        "uid": 32387, 
        "id": 72778, 
        "name": "dev"
    }, 
    "iphone": {
        "color": 0, 
        "count": 1, 
        "uid": 32387, 
        "id": 72777, 
        "name": "iphone"
    }
}

Ich habe auch ein NSArray, das die für ein Element erforderlichen IDs enthält, z. B. [72777, 73129].

Was ich tun müssen, ist ein Wörterbuch von id => Name für die Elemente in dem Array zu erhalten. Ich weiß, dass dies möglich ist, durch Iteration durch das Array, und dann Schleife durch alle Werte im Wörterbuch und Werte zu überprüfen, aber es scheint, wie es sollte es eine weniger langwierige Methode, dies zu tun.

Entschuldigen Sie meine Unwissenheit, da ich gerade versuche, mich mit dem iPhone SDK zurechtzufinden und Objective C und Cocoa zu lernen.

6voto

Quinn Taylor Punkte 44113

Zunächst einmal, da Sie JSON verwenden, hoffe ich, dass Sie bereits gefunden haben BSJSONAdditions und/oder json-Rahmenwerk , beides Open-Source-Projekte zum Parsen von JSON in native Cocoa-Strukturen. Dieser Blogbeitrag zeigt, wie man letzteres verwendet, um ein NSDictionary aus einem JSON-String zu erhalten.

Das Problem besteht dann darin, die passenden Werte im Wörterbuch zu finden. Mir ist keine einzige Methode bekannt, die das tut, wonach Sie suchen - die Cocoa-Frameworks sind zwar recht leistungsfähig, aber sehr generisch und flexibel ausgelegt. Allerdings sollte es nicht allzu schwer sein, in nicht allzu vielen Zeilen zusammenzustellen... (Da Sie auf dem iPhone programmieren, werde ich eine schnelle Aufzählung verwenden, um den Code sauberer zu machen.)

NSDictionary* jsonDictionary = ...
NSDictionary* innerDictionary;
NSArray* requiredIDs = ...
NSMutableDictionary* matches = [NSMutableDictionary dictionary];
for (id key in jsonDictionary) {
    innerDictionary = [jsonDictionary objectForKey:key];
    if ([requiredIDs containsObject:[innerDictionary objectForKey:@"id"]])
        [matches setObject:[innerDictionary objectForKey:@"name"]
                    forKey:[innerDictionary objectForKey:@"id"]];
}

Dieser Code kann Tippfehler enthalten, aber die Konzepte sollten solide sein. Beachten Sie auch, dass der Aufruf von [NSMutableDictionary dictionary] wird ein automatisch freigegebenes Objekt zurückgeben.

2voto

drewh Punkte 9935

Haben Sie diese NSDictionary-Methode ausprobiert:

+ (id)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys

0voto

Jim Carroll Punkte 2300

Drew hat die Antwort... Ich habe festgestellt, dass die GCC-Handbuch für das NSDictionary war neulich, als ich eine ähnliche Frage hatte, auf einfache Weise hilfreich.

http://www.gnustep.org/resources/documentation/Developer/Base/Reference/NSDictionary.html

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X