2009-01-13 2 views
0

J'ai essayé d'utiliser la méthode évidente comme indiqué dans l'exemple suivant, mais ma variable passée (de rootcategory) est encore nulle sur viewDidLoad dans la vue chargée.Comment pouvez-vous transmettre des données entre les vues à l'aide d'un UINavigationController

Ceci est mon code:

CategoryViewController *viewController = [[CategoryViewController alloc] initWithNibName:@"CategoryViewController" bundle:[NSBundle mainBundle]]; 
self.categoryViewController.rootCategory = @"433"; 
self.categoryViewController = viewController; 
[viewController release]; 

Je synthétisant une propriété dans l'en-tête comme suit:

@property (nonatomic, readwrite) NSString *rootCategory; 

Répondre

3

Vous allouez viewController et essayez de modifier self.categoryViewController avant de l'affecter à viewController.

CategoryViewController *viewController = [[CategoryViewController alloc] initWithNibName:@"CategoryViewController" bundle:[NSBundle mainBundle]]; 
viewController.rootCategory = @"433"; 
self.categoryViewController = viewController; 
[viewController release]; 

devrait fonctionner.

+0

n'a pas aidé Im peur n'a fait aucune différence –

+0

auriez-vous l'esprit de me dire la différence entre l'utilisation de soi et non, je devine que ce n'est pas comme ça. en C# (mon arrière-plan) –

+0

Quels sont les @property de rootCategory et categoryViewController? rootCategory doit être "copier" ou "conserver" et categoryViewController doit être "conserver". L'utilisation de self signifie utiliser le setter défini (via @property, dans ce cas) –

0

Qu'est-ce que votre fichier d'en-tête pour CategoryViewController ressembler? Avez-vous défini rootCategory en tant que propriété? Est-il synthétisé ou avez-vous écrit votre propre setter et getter?

+0

ajouté snippet à la question –

0

Je crois que viewDidLoad est appelée sur la nouvelle instance avant que initWithNibName: ne retourne, vous devrez donc définir vos propriétés après son appel.

+0

Alors, quelle méthode pourrais-je mettre mon code d'exécution pour ramasser la variable? –

0

Votre code est correct, mais viewDidLoad est appelé avant de définir les propriétés (comme indiqué par iKenndac). Vous devez utiliser la méthode - (void)viewWillAppear:(BOOL)animated à la place. Comme le suggère le nom de la méthode, ceci est appelé juste avant que la vue n'apparaisse à l'écran.