Accès aux propriétés du contrôleur de vue parent (personnalisé)
J'ai écrit un UITabBarController
sous-classe (appelé MainViewController
) et ajouté un peu de variables d'instance, plus précisément un lieu de type de Lieu. Chaque onglet de la MainViewController
besoin d'accéder au lieu de la variable de la MainViewController
. Dans le premier onglet, un UIViewController
sous-classe nommée HomeViewController
j'ai écrit mon viewDidLoad
méthode et essayé de sortie de NSLog avec les deux...
NSLog(@"%@", self.parentViewController.venue.name);
et
NSLog(@"%@", self.tabBarController.venue.name);
Mais XCode donne l'erreur
error: request for member 'venue' in something not a structure or union
Je peux accéder à la salle de la propriété de l'intérieur MainViewController
très bien jusqu'à avoir écarté une erreur. Le simulateur d'iPhone ne voir les deux self.parentViewController
et self.tabBarController
comme une instance de MainViewController
. La ligne de...
NSLog(@"%@", self.tabBarController);
sorties...
2009-06-05 17:54:46.502 Venue[29729:20b] <MainViewController: 0x536600>
Car il est vu comme un MainViewController
exemple, je doute de l'aide de l'incantation de l'aide. Est ma seule autre option pour initialiser le HomeViewController
avec une copie de la salle ou suis-je juste faire quelque chose de complètement faux avec"self.parentViewController.venue.name
'? Merci, Rob
source d'informationauteur rob5408
Vous devez vous connecter pour publier un commentaire.
Vous êtes en train de faire quelque chose de complètement faux.
parentViewController
est déclaré comme unUIViewController
.NSLog
ing il renvoie son type réel en raison de l'merveilles de polymorphisme.UIViewController
n'ont pas deVenue
membre. VotreMainViewController
. Casting c'est, en fait, la bonne réponse. Assurez-vous d'importerMainViewController.h
.Assurez-vous également que, bien sûr, que
venue
est déclaré comme un@property
de MainViewController, etname
est un@property
deVenue
.Votre
NSLog()
déclaration est "voir" comme unMainViewController
parce que c'est ce que l'objet est en réalité. Le problème que vous rencontrez, c'est que le compilateur ne fait pas réaliser cela, car lesparentViewController
propriété est déclarée comme un simple vieuxUIViewController
. Même si vous êtes de retour d'une sous-classe, autant que le compilateur sait que vous essayez d'appeler cette méthode sur unUIViewController
et elle va commencer à se plaindre. Moulage d'unMainViewController
permettra de résoudre le problème.