2009-06-26 13 views
3

Ich habe ein Wörterbuch der Wörterbücher, dieiPhone NSArray von Wörterbuch der Wörterbuch-Werte

im JSON-Format zu mir 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 auch ein NSArray haben die IDs enthält, die für ein Element erforderlich. z.B. [72777, 73129]

Was ich tun muss, ist ein Wörterbuch ID => Name für die Elemente im Array zu bekommen. Ich weiß, dass dies möglich ist, indem man durch das Array iteriert und dann alle Werte im Dictionary durchläuft und die Werte überprüft, aber es scheint, dass es eine weniger langwierige Methode dafür geben sollte.

Entschuldige meine Unwissenheit, während ich versuche, mich im iPhone SDK zurecht zu finden und Objective C und Cocoa zu lernen.

+0

Entschuldigung für meine vorzeitige Antwort - Ich habe dafür gestimmt, es zu löschen. Kannst du klarstellen, dass du den JSON bereits in eine Hierarchie von NSDictionarys geparst hast? – teabot

+1

+1 Gute Frage. Ich habe retagged, um "json" hinzuzufügen und "iphone" zu "Kakao" geändert, da diese Frage allgemeiner anwendbar ist. –

+0

Ja, ich habe den JSON bereits in die Hierarchie von NSDictionaries geparst. Das ist ziemlich einfach mit dem JSON-Framework – Xetius

Antwort

5

First off, da Sie JSON verwenden, ich hoffe, Sie haben festgestellt, bereits BSJSONAdditions und/oder json-framework, beide Open-Source-Projekte für Sie JSON in native Cocoa Strukturen Parsen . This blog post gibt eine Vorstellung davon, wie letzteres verwendet wird, um ein NSDictionary aus einer JSON-Zeichenfolge abzurufen.

Das Problem besteht dann darin, die übereinstimmenden Werte im Wörterbuch zu finden. Mir ist keine einzige Methode bekannt, die das tut, wonach Sie suchen - die Cocoa-Frameworks sind ziemlich mächtig, aber sie sind sehr allgemein und flexibel. Allerdings sollte es nicht allzu schwierig sein, zusammen zu stellen, in nicht zu viele Linien ... (Da Sie auf dem iPhone sind Programmierung, werde ich schnell 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"]]; 
} 

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

2

Haben Sie diese NSDictionary Methode versucht:

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

Ich fragte nicht, wie man ein Wörterbuch, eher die beste Möglichkeit, ein vorhandenes Wörterbuch zu filtern, zu bauen. – Xetius

0

Drews bekam die Antwort ... Ich fand, dass die GCC manual for the NSDictionary in einem Barebone-Weg der andere Tag hilfreich war, als ich eine ähnliche Frage hatte.

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

+2

Wenn man bedenkt, dass er auf dem iPhone programmiert, ist die Dokumentation von Apple eine viel bessere Idee ... http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/ –

Verwandte Themen