Domanda

Ho un dizionario dei dizionari che mi viene restituito in formato JSON

{
    "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"
    }
}

Ho anche un NSArray contenente l'id richiesto per un articolo. per esempio. [72777, 73129]

Quello che devo fare è ottenere un dizionario di id = > nome per gli elementi nell'array. So che è possibile iterando attraverso l'array e quindi eseguendo il ciclo attraverso tutti i valori nel dizionario e controllando i valori, ma sembra che ci dovrebbe essere un metodo meno lungimirante per farlo.

Scusa la mia ignoranza mentre sto solo cercando di orientarmi nell'SDK di iPhone e apprendere gli obiettivi C e Cocoa.

È stato utile?

Soluzione

Prima di tutto, poiché stai utilizzando JSON, spero che tu abbia già trovato BSJSONAdditions e / o json-framework , entrambi progetti open source per analizzare JSON in strutture native di cacao per te. Questo post sul blog dà un'idea di come utilizzare quest'ultimo per ottenere un NSDictionary da una stringa JSON.

Il problema diventa quindi quello di trovare i valori corrispondenti nel dizionario. Non sono a conoscenza di un singolo metodo che fa ciò che stai cercando & # 8212; i framework Cocoa sono piuttosto potenti, ma sono progettati per essere molto generici e flessibili. Tuttavia, non dovrebbe essere troppo difficile mettere insieme in non troppe righe ... (Dato che stai programmando su iPhone, userò una rapida enumerazione per rendere il codice più pulito.)

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

Questo codice può avere errori di battitura, ma i concetti dovrebbero essere validi. Si noti inoltre che la chiamata a [NSMutableDictionary dictionary] restituirà un oggetto rilasciato automaticamente.

Altri suggerimenti

Hai provato questo metodo NSDictionary:

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

Drew ha la risposta ... Ho scoperto che Il manuale GCC per NSDictionary mi è stato d'aiuto in modo spoglio l'altro giorno quando avevo una domanda simile.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top