Il y a deux approches, en général.
Dans la première approche, lorsque vous instanciez votre contrôleur suivant la vue, vous pouvez définir une propriété de tableau à « hériter » du courant (bientôt à être antérieur ou parent) contrôleur de vue:
MyNextViewController *_myNextViewController = [[MyNextViewController alloc] initWithNibName:@"MyNextViewController" bundle:nil];
_myNextViewController.myViewControllerArray = self.myViewControllerArray;
...
Dans la seconde approche, vous pouvez créer une propriété myAppDelegateArray
dans votre délégué d'application, en l'instanciant lorsque l'application est initialisée (ou instanciée ailleurs, à la demande).
Vous pouvez ensuite appeler le getter pour cette propriété à partir de n'importe quelle classe, y compris les contrôleurs de vue.
Par exemple, dans une instance de MyNextViewController
, vous pourriez avoir une propriété appelée myViewControllerArray
et vous définiriez comme suit:
self.myViewControllerArray = [UIAppDelegate myAppDelegateArray];
vous ajouteriez une déclaration #define
fichier quelque part dans vos constantes d'application, par exemple:
#define UIAppDelegate ((MyAppDelegate *)[UIApplication sharedApplication].delegate)
ou utiliser le plein [UIApplication sharedApplication].delegate
appel, si vous préférez. En règle générale, les gens semblent préférer l'approche de délégué d'application, car elle décentralise l'accès à la propriété désirée. Avec cette approche, si vous réorganisez vos contrôleurs de vue ou insérez de nouveaux contrôleurs de vue dans votre hiérarchie VC, vous n'avez pas besoin de déboguer les propriétés du contrôleur de vue enfant héritées des contrôleurs de vue parents, car une référence est toujours disponible. déléguer.
Personnellement, je ne recommande jamais l'approche «utiliser l'application déléguer comme un Globals.h» parce que ce n'est pas une bonne technique de conception pour enseigner aux gens. L'utilisation de propriétés de classe pour transmettre des objets est beaucoup plus ordonnée. –
Je suis vraiment intéressé d'entendre les avantages et les inconvénients de ces modèles. Je suis de deux avis à propos d'eux et je me suis orienté vers l'utilisation de l'approche de délégué d'application récemment, car je réutilise plus de mon code. –
Par curiosité ... quel est le meilleur moyen de réinitialiser un NSArray partagé qui est transmis? Faire une sortie ou juste mettre à zéro? Aussi, quel est l'effet si je mets un NSarray = nil dans le Contrôleur A IF le Contrôleur B et C ont une retenue dessus? Merci – wgpubs