2010-04-15 3 views
2

C'est une question simple:Comment puis-je transmettre des informations entre 2 contrôleurs View différents?

J'ai 2 contrôleurs de vue différents, et chacun a ses propres données stockées dans son fichier .m. Je veux prendre une valeur, par exemple, une valeur entière (int i=3;) qui est déclarée dans ViewController1 et la passer à ViewController2, donc je serai en mesure d'utiliser cette valeur dans le second contrôleur de vue.

Quelqu'un peut-il s'il vous plaît dites-moi comment le faire?

Répondre

2

2014 Edition - en cas où quelqu'un arrive à cela, ne l'écoutez pas à moi. La "meilleure façon" est vraiment la meilleure façon.

bonne façon - Créez votre propre méthode initWithI sur ViewController2

Better Way - Créer ViewController2 comme d'habitude, puis définissez la valeur comme une propriété.

Best Way - C'est une odeur de code, vous associez étroitement les données avec un ViewController. Utilisez CoreData ou NSUserDefaults à la place.

+0

NSUserDefaults semble être la solution la plus simple. – Sagiftw

1

Si vous incorporez ViewController1 dans un UINavigationController, il s'agit d'un cas d'utilisation assez courant. A l'intérieur ViewController1, ajoutez ce code où vous voulez montrer l'ViewController2 (dans une action par exemple):

ViewController2 *controller = [[ViewController2 alloc] initWithNibName:<nibName> bundle:nil]; 
[controller setData:<your shared data>]; 
[self.navigationController pushViewController:controller animated:YES]; 
[controller release]; 

Le contrôleur de navigation se chargera du reste.

1

Initialise le nouveau contrôleur de vue avec la valeur.

- (id)initWithValue:(int)someValue { 
    if (self = [super initWithNibName:@"MyViewController" bundle:nil]) { 
     myValue = someValue; 
    } 
    return self; 
} 

Puis, de l'autre contrôleur de vue (en supposant cette autre contrôleur de vue est la propriété d'une UINavigationController)

- (void)showNextViewControler { 
    MyViewController *vc = [[[MyViewController alloc] initWithValue:someValue] autorelease] 
    [self.navigationController pushViewController:vc animated:YES]; 
} 

et/ou de le faire après l'initialisation, créez une méthode ou une propriété qui vous permet de réglez.

- (void)setSomeValue:(int)newValue { 
    myValue = newValue; 
} 

Puis

- (void)showNextViewControler { 
    MyViewController *vc = [[[MyViewController alloc] initWithNibName:@"Foo" bundle:nil] autorelease] 
    [vc setValue:someValue] 
    [self.navigationController pushViewController:vc animated:YES]; 
} 
Questions connexes