2014-06-23 3 views
0

Je crée un projet où je suis bloqué à un concept de récupération de clé à partir d'une valeur donnée. J'ai créé une vue de table en ajoutant les valeurs du dictionnaire - dites "city_names" pour la clé "city_id". Si l'utilisateur sélectionne une ville, je souhaite obtenir le "city_id" correspondant à cette ville.Comment trouver la clé à partir de la valeur donnée dans un dictionnaire dans iOS

J'ai dictionnaire sous forme

"city":[ 
    { 
     "id":"1", 
     "city":"City1" 
    }, 
    { 
     "id":"2", 
     "city":"City2" 
    }, 
    { 
     "id":"3", 
     "city":"musat" 
    }, 
    { 
     "id":"4", 
     "city":"city3" 
    }, 
    { 
     "id":"5", 
     "city":"City 4" 
    } 
] 

Je suis plutôt préoccupé par obtenir l'indice correspondant du dictionnaire de l'enfant dont la ville est sélectionnée.

Merci d'avance.

+4

Je ne suis pas sûr que vous avez déjà lu ce docs: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/ Reference/Reference.html mais il n'est jamais trop tard pour jeter un oeil à la méthode '-allKeysForObject:'. – holex

+0

Ce n'est pas un dictionnaire, c'est un tableau de dictionnaire si vous regardez la partie "[]" cela indique qu'il s'agit d'un tableau ... et son "{}" son dictionnaire .... @vin – Kamarshad

+0

oui je sais il. Kamarshad. Mais ce que je veux vraiment, c'est afficher le "city_name" que j'ai implémenté en obtenant un autre tableau. mais je ne parviens pas à obtenir le "city_id" correspondant du tableau de dictionnaire lorsque l'utilisateur sélectionne une ligne particulière. – Vin

Répondre

2

On peut donc supposer que vous peuplez le tableview, par ses méthodes de DataSource, et que vous voulez faire référence à votre modèle de données lorsque l'utilisateur sélectionne une ligne particulière?

Dans ce cas, vous devriez probablement conserver un tableau de clés ainsi que le dictionnaire de modèles. Vous pouvez ensuite récupérer la clé à partir du tableau de clés à l'aide de la ligne transmise au délégué tableview et, à partir de là, obtenir la clé de l'entrée du dictionnaire.

Cela fonctionne parce qu'un tableau a un ordre fixe, comme le fait une tableview, et vous avez l'avantage de trier le tableau dans n'importe quel ordre adapté aux données affichées. Les dictionnaires n'ont pas d'ordre fixe et ne doivent donc pas être utilisés comme seul conteneur pour les données du modèle. L'inconvénient de cette approche est que vous devez gérer deux structures de données. Par conséquent, la meilleure approche consiste à créer une classe personnalisée pour vos données de modèle et à utiliser un seul tableau de ces objets de modèle. Il y a beaucoup plus d'avantages à cette approche.

+0

Il est difficile de maintenir les structures de données comme des tableaux ou des classes de noms et d'identifiants. Cause plus de résultats peuvent dans le tableau dans la portée plus étendue du projet. La plupart d'entre eux sont des caractères nuls de city_names. J'élimine ces null city_names en affichant à l'utilisateur. Il est difficile d'obtenir son city_id correspondant par cette méthode. – Vin

0

Sur base de votre description.

Je vais vous suggérer de faire vos données sous forme de Array(NSarray) de Dictionaries. Et comme peupler votre UITableViewCell selon ce array.

Dans didSelectRowAtIndexPath méthode

Dictionaries* dict = [yourArray objectAtIndex:indexPath.row]; 

NSString * selectedCityId = [dict objectForKey:@"passYourKeyIdentifier"]; 
2

Essayez cette

int index = [[city valueForKey:@"city"] indexOfObject:@"Selected_City"]; 
NSString *selected_id = [[city valueForKey:@"id"] objectAtIndex:index]; 
Questions connexes