2009-03-30 6 views
4

Je développe une application iPhone en Objective-C. Je veux accéder à un membre de données qui est de type NSMutableArray de la classe RootViewController dans une autre classe. J'ai essayé de rendre le tableau statique. Mais je voudrais avoir un tableau non statique. Comment puis-je y parvenir?Accéder à un membre de RootViewController dans une autre classe

Répondre

8

Vous avez besoin de deux choses:

  1. une référence au RootViewController
  2. un moyen d'obtenir votre variable de RootViewController.

Dans une situation où vous avez (probablement) un RootViewController par application, il est logique de conserver une référence à cet objet dans le délégué de votre application. Vous pouvez obtenir le délégué de l'application comme ceci:

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 

Dans votre classe de délégué de l'application, vous devez ajouter une propriété appelée rootViewController qui expose votre objet RootViewController. Maintenant, vous pouvez écrire des choses comme

RootViewController *theRootViewController = appDelegate.rootViewController; 

Ceci satisfait à la première exigence. Maintenant, afin d'accéder à l'objet appartenant au contrôleur de vue, vous devez ajouter une propriété à RootViewController. Vous n'avez pas vraiment dit ce que l'objet est ou fait, alors appelons-le simplement myMutableArray. Créer une readonly propriété avec ce nom sur RootViewController, et maintenant, vous serez en mesure d'écrire des choses comme ceci:

NSMutableArray *myArray = theRootViewController.myMutableArray; 

Cela vous permettra de faire ce que vous voulez faire.

Je dois vous avertir, cependant: exposer un NSMutableArray n'est généralement pas une bonne idée. La raison en est que si vous changez le contenu de ce tableau, RootViewController n'aura aucune idée que vous avez fait cela. Donc, si vous créiez, disons, une vue maître-détail, votre RootViewController ne saurait pas que vous avez ajouté un nouvel objet.

Il serait préférable que vous écriviez des méthodes qui permettent à RootViewController de modifier la matrice en interne. Par exemple, vous pouvez avoir une méthode nommée addFooObject: qui gère le tableau. Ensuite, le contrôleur de vue saura ce que vous avez fait. Pour l'accès, vous pouvez très facilement retourner une copie immuable, autoreleased du tableau mutable de votre propriété.

+0

Ne pas oublier d'importer votre classe appdelegate (#import "AppDelegate.h") :) – Tieme

+0

Oh et J'avais besoin de typer le délégué de l'application: AppDelegate * appDelegate = (AppDelegate *) [[UIApplication sharedApplication] délégué]; – Tieme

5

Vous pouvez également accéder au contrôleur de vue racine uising la sharedApplication dans une ligne de code:

[[[UIApplication sharedApplication] keyWindow] rootViewController] 
Questions connexes