2010-11-06 2 views
3

J'ai donc un NSDictionary où l'une des clés est un tableau de dictionnaires. La classe à laquelle correspond ma correspondance a des noms de clé et des paramètres de mise en correspondance. Est-ce que setValuesForKeysWithDictionary peut remplir les sous-dictionnaires pour moi? Quand je l'ai essayé, il semblait que ça remplissait les objets d'ordure ou quelque chose comme ça, mais je suis un newbe, alors peut-être que je fais quelque chose de mal. Est-ce que cette fonction fonctionne comme ça?Peut setValuesForKeysWithDictionary être utilisé avec un dictionnaire imbriqué

Répondre

4

Je me suis rendu compte que setValuesForKeysWithDictionary n'avait aucun moyen de savoir quel type d'objet remplir avec NSMutableArray. J'ai fini par créer un setter personnalisé pour la propriété array qui boucle manuellement les éléments du tableau (de NSDictionaries) que vous passez et appelle setValuesForKeysWithDictionary pour chacun d'entre eux.

Voici le code:

Il y a une propriété appelée itemList de type NSMutableArray que je veux rempli il des objets de type objet. Le setItemList setter parcourt le tableau d'objets mystères, convertissant chaque NSDictionary en mon type d'élément et les ajoute à un nouveau tableau. Tout commentaire sur la simplification du code serait le bienvenu.

Je veux également ajouter une certaine logique ici pour gérer une situation où le tableau contient déjà des objets Item au lieu de dictionnaires. Dans ActionScript, vous pouvez vérifier null après avoir essayé de lancer quelque chose pour voir si cela a fonctionné, pas sûr de ce que le processus équivalent serait ici. [item isMemberOfClass [Item class]] évalue toujours à OUI, même si l'élément est un NSDictionary. Je ne comprends pas pourquoi ...

- (void) setItemList:(NSMutableArray*)input{ 
     [itemList autorelease]; 
     itemList = [[NSMutableArray alloc] initWithCapacity:input.count]; 

     //loop through the array, creating an Item for for each object in the array 
     for(int i=0;i<input.count;i++){ 


      Item* item = [Item new]; 
      [item setValuesForKeysWithDictionary:(NSDictionary*)[input objectAtIndex:i]]; 
      [itemList insertObject:item atIndex:i]; 

     } 
    } 
    - (NSMutableArray*) itemList{ 
     return itemList; 
    } 
Questions connexes