2010-08-22 2 views
0

tout le monde, je ne sais pas pourquoi cela ne fonctionne pas, espérons que quelqu'un ici peut m'aider. Voici ce que j'essaie de faire:iphone sdk: les objets sont perdus quand un autre viewController est poussé?

J'ai deux ViewControllers, appelons-les secondViewController et firstViewController. Le firstViewController est affiché lorsque l'application démarre et il pousse le secondViewController.

À l'intérieur du secondViewController, j'ai défini une propriété.

Maintenant je veux changer cette propriété dans le firstViewController et ensuite pousser le secondViewController mais pour une raison quelconque dès que le secondViewController est poussé ma propriété est remise à zéro .... pourquoi cela se passe-t-il? Voici mon code:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
secondViewController.test = 2; 
[self.navigationController pushViewController:secondViewController animated:YES];  

} 

La propriété de test dans cet exemple est simplement un simple NSInteger. Maintenant, dès que le secondViewController est poussé, la valeur "test" n'est plus deux c'est zéro ..... Pourquoi ????

est ici le fichier d'en-tête de mon secondViewController: #import

@interface secondViewController : UIViewController { 

NSInteger test; 

} 

@property NSInteger test; 

@end 

est ici le fichier .m:

- (void) viewDidLoad{ 
NSLog(@"%i", self.test): 
} 
+0

Pouvez-vous afficher le code de SecondViewController? C'est à dire. viewDidLoad, viewDidAppear, la fonction setter pour test ... et comment et quand accédez-vous à cette valeur? – Eiko

+0

je l'ai ajouté au code ci-dessus –

Répondre

0

Si vous vérifiez depuis le viewDidLoadtest peut ne pas être toujours 2 Je ne comprends pas pourquoi c'est non plus. Exemple:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    SecondViewController viewController = [[SecondViewController alloc] init]; 
    viewController.test = 2; 
    [self.navigationController pushViewController:viewController animated:YES]; 
} 

// In SecondViewController 

- (void)viewDidLoad { 
    NSLog(@"ViewDidLoad: %i", self.test); 

    [super viewDidLoad]; 
} 

- (void)viewWillAppear:(BOOL)animated { 
    NSLog(@"ViewWillAppear: %i", self.test); 

    [super viewWillAppear:animated]; 
} 

Cela parfois entraîner la sortie suivante:

viewDidLoad: 0

viewWillAppear: 2

Mais parfois, il peut aussi entraîner la sortie suivante :

viewDidLoad: 2

viewWillAppear: 2

Alors, je vous recommande d'utiliser votre variable dans la ViewWillAppear -method au lieu du ViewDidLoad -method. Vous devez créer vos UIView et les ajouter dans la méthode ViewDidLoad et les ajuster à votre variable de test dans la méthode ViewWillAppear :).

C'est un peu confus, je sais, et il m'a fallu quelques heures pour comprendre pourquoi ma variable n'était pas déjà réglée.

+0

Merci j'ai eu je travaille! mais alors j'ai rencontré un autre problème: Je veux ajouter un thirdViewController et la propriété mentionnée ci-dessus appartient maintenant à ce thirdViewController. J'ai défini la propriété dans le firstViewController.Alors je pousse le secondViewController. Le secondViewController pousse le thirdViewController! Dès que j'arrive au thirdViewController ma propriété est perdue .... Des idées? –

+0

je l'ai compris. Merci beaucoup! –

+0

De rien. – elslooo

Questions connexes