1 votes

Gestion de plusieurs contrôleurs de vue et de données

Mon application a un écran principal sur lequel l'utilisateur commence toujours, et à partir duquel je veux afficher d'autres vues de manière programmatique. J'ai configuré l'application de manière identique à l'approche du chapitre 6 de "Beginning iPhone Development", c'est-à-dire en utilisant un RootViewController qui charge d'autres contrôleurs de vues.

Le livre utilise un bouton pour déclencher le chargement du contrôleur de vue suivant, mais dans mon application, j'ai besoin de permuter les contrôleurs à la fin des appels de fonction et de partager les données (images UII traitées, etc.) entre les vues. Je n'utilise pas de barre d'onglets ou de contrôleur de navigation.

Ce que je me demande, c'est si je dois simplement faire de mon MainViewController le contrôleur racine et présenter les ModalViewControllers à partir de là ? J'aimerais conserver le modèle racine, mais je ne comprends pas bien comment le relier et partager les données. J'ai vu des articles qui mentionnent l'utilisation de protocoles et de notifications, mais je n'ai pas encore compris. Tout conseil est le bienvenu.

1voto

Alex Reynolds Points 45039

Ce que vous voulez faire, c'est ajouter un Cacao biens dans votre contrôleur de vue principal qui référence les instances d'objets que vous voulez partager avec les contrôleurs de vue subordonnés.

Par exemple, si nous voulons partager un NSArray nous spécifions sa propriété dans l'en-tête du contrôleur de vue principal :

@interface MainViewController : UIViewController {
  NSArray *myArray;
}

@property (nonatomic, retain) NSArray *myArray;

@end

Dans l'implémentation, ajoutez le @synthesize et n'oubliez pas de release le tableau dans -dealloc :

@implementation MainViewController

@synthesize myArray;

...

- (void) dealloc {
  [myArray release];
  [super dealloc];
}

@end

Vous voulez également ajouter cette propriété aux contrôleurs de vue qui sont subordonnés au contrôleur de vue principal, exactement de la même manière. Dans leurs en-têtes, spécifiez le même nom de variable et la même description de propriété.

Dans votre contrôleur de vue principal, lorsque vous êtes prêt à pousser un contrôleur de vue subordonné, vous définissez la propriété du contrôleur de vue subordonné en conséquence juste avant de le pousser :

- (void) pushSubordinateViewController {
  SubordinateViewController *subVC = [[SubordinateViewController alloc] initWithNibName:@"SubordinateViewController" bundle:nil];
  subVC.myArray = self.myArray; // this sets the sub view controller's myArray property
  [self.navigationController pushViewController:subVC animated:YES];
  [subVC release];
}

De même dans votre contrôleur de vue subordonné, il devra définir la propriété array de son subordonné en conséquence, juste avant de pousser son propre contrôleur de sous-vue.

En définissant les références de cette manière, chaque contrôleur de vue est dirigé vers le même tableau, contenant les éléments souhaités.

Pour utiliser le tableau, il suffit d'appeler self.myArray par exemple [self.myArray objectAtIndex:index] pour obtenir un objet à un indice donné.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X