2017-10-13 4 views
1

Je possède ce NSDictionary:En passant NSDictionary à un autre contrôleur utilisant UITableView

{ 
    Name = 
    (
    "Lucas", 
    "Tom" 
); 
    Surname = 
    (
    "Jhon", 
    "Smith" 
    "Hop" 
); 

Nom est un simple NSArray et nom de famille est un NSMutableArray.

Ok maintenant mon problème est le suivant:

A partir de ce dictionnaire, je dois montrer à UITableView la clé de chaque élément du NSDictionary. Par exemple, dans ce cas, UITableView aura deux éléments, un appel Nom et l'autre Nom. Lorsque je clique sur un élément de l'UITableView, je vais devoir aller à un autre contrôleur qui va me montrer toutes les données de la cellule cliquée. Si par exemple, je clique sur le nom de famille, quand j'ouvre le nouveau contrôleur, je vais devoir l'obtenir comme Jhon, Smith et Hop.

Pour commencer, j'ai essayé de montrer la UITableView avant toutes les clés en écrivant:

self.KeyArray = [myDictionary allKeys]; 

et dans la méthode cellForRowAtIndexPath:

cell.textLabel.text = [self.KeyArray objectAtIndex: indexPath.row]; 

Mais ceci est une mauvaise approche , parce que je vais perdre toutes les informations liées à cette clé spécifique. Avez-vous une idée de comment je peux le faire?

+0

https://stackoverflow.com/a/41887007/5461400 –

+0

Voici par exemple pour transmettre des données avec Segue –

Répondre

2

Vous pouvez faire comme ça dans didSelectRowAtIndexPath écrire ci-dessous le code

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *keyOfMainDic = [self.KeyArray objectAtIndex:indexPath.row]; // in the keyOfMainDic, you will get selected key name of your main dictionary 
    NSMutableArray *temArray = [yourMaindict objectForKey:keyOfMainDic] // You will get array of specific key. 

// Here you just need to pass "temArray" to your destination controller. 
} 
+0

'types de pointeur Incompatible initialisation 'NSMutableDictionary *' avec une expression de type « NSMutableArray * _Nullable'' Toute idée? Mon dictionnaire est défini de cette façon: 'NSMutableDictionary *> * dict;' –

+0

La réponse est mise à jour, Regardez comme vous devez prendre NSMutableArray pas dictionnaire. – iPatel

+0

Vous êtes mon nouveau dieu –

1

D'abord, vous devez définir un Segue de votre contrôleur de vue qui a tableview à votre contrôleur de détail et de lui donner un identifiant de story-board.

Définissez ensuite une propriété dans l'en-tête de votre contrôleur de détail héritant du type KeyArray.

Ensuite, il suffit de le coder comme ci-dessous. Ceci est juste une suggestion, s'il vous plaît utiliser un modèle pour votre tableau au lieu du dictionnaire.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 

    self.KeyArrayItem = [self.KeyArray objectAtIndex:indexPath.row]; 
    [self performSegueWithIdentifier:@"yourSegueID" sender:self.KeyArrayItem]; 

} 


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    AnotherController *controller = segue.destinationViewController; 
    controller.KeyArrayItem = sender; 

} 
3

Vous pouvez utiliser un délégué pour envoyer ce NSMutableArray à un autre contrôleur. Disons que votre premier contrôleur de vue est "A" qui a ces clés de nom et de nom de famille. Et deuxième contrôleur est "B" qui aura le tableau que vous souhaitez envoyer. Maintenant, 1. Créez un protocole dans un contrôleur.
2. Créez l'objet délégué de ce protocole.
3. Créer 1 méthode dans un contrôleur qui peut avoir un paramètre Comme: - (NSMutableArray *).
4. Implémentez ce protocole dans B Controller.
5. Déclarez la méthode du contrôleur B que vous avez définie dans le contrôleur A
6. Appelez cette méthode à l'aide de l'objet délégué dans didSelectRowAtIndexPath et passez cet objet dans cette méthode.
7.Vous avez maintenant le NSMutableArray dans cette méthode et vous êtes libre d'utiliser ces valeurs.