2010-05-03 5 views
0

hey, je suis actuellement en utilisant l'iPhone SDK et je vais avoir du mal à faire passer un NSString par 3 vuesComment transmettre un NSString à 3 ViewControllers?

Je suis en mesure de passer un NSString entre 2 contrôleurs de vue mais je ne peux pas passer par un autre. Mon code est le suivant ...

`- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)index`Path { 

NSString *string1 = nil; 

NSDictionary *dictionary = [listOfItems objectAtIndex:indexPath.section]; 
NSArray *array = [dictionary objectForKey:@"items"]; 
string1 = [array objectAtIndex:indexPath.row]; 


//Initialize the detail view controller and display it. 
ViewController2 *vc2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:[NSBundle mainBundle]]; 
vc2.string1 = string1; 
[self.navigationController pushViewController:vc2 animated:YES]; 
[vc2 release]; 
vc2 = nil; 
} 

dans les « viewController 2 » implémentations Je suis en mesure l'utilisation « string1 » dans la barre de titre en procédant comme suit ....

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.navigationItem.title = string1; 
UIBarButtonItem *addButton = [[[UIBarButtonItem alloc] 
      initWithImage:[UIImage imageNamed:@"icon_time.png"] 
      style:UIBarButtonItemStylePlain 
      //style:UIBarButtonItemStyleBordered 
      target:self 
      action:@selector(goToThirdView)] autorelease]; 
self.navigationItem.rightBarButtonItem = addButton; 

    } 

mais je également un bouton de navigation sur le côté droit que je voudrais pousser une nouvelle vue

- (void)goToThirdView 
    { 
    ViewController3 *vc3 = [[ViewController3 alloc] initWithNibName:@"ViewController3" bundle:[NSBundle mainBundle]]; 

    [self.navigationController pushViewController:NESW animated:YES]; 
    vc3.string1 = string1 ; 
    [vc3 release]; 
    vc3 = nil; 
} 

Comment puis-je passer sur la même chaîne à la troisième vue? (ou quatrième)

Répondre

0

Vous pouvez trouver un exemple de code à partir d'un question demandé précédemment.

1

Ce que vous avez doit fonctionner, sauf que vous voulez définir la chaîne dans vc3 avant de l'enfoncer sur la pile pour vous assurer qu'elle est présente lorsque la vue et la barre de navigation sont dessinées. C'est ainsi que vous l'avez dans le vc2 qui fonctionne. Cependant, en ce qui concerne la conception de l'application, il est difficile de transmettre des valeurs directement entre les contrôleurs de vue. Idéalement, vous voulez que vos contrôleurs de vue soient autonomes et puissent fonctionner indépendamment de l'autre contrôleur qui l'a précédé ou non. (Cela devient vraiment important quand vous avez besoin de reprendre une application au point où elle a été interrompue.) Si les contrôleurs de vue sont interdépendants, votre application deviendra emmêlée et complexe à mesure qu'elle s'agrandit.

La meilleure façon d'échanger des données entre les vues consiste à parquer les données dans un endroit accessible à tous. Si c'est l'information d'état de l'application, mettez-la dans les valeurs par défaut de l'utilisateur ou vous pouvez ajouter un attribut du délégué de l'application. S'il s'agit de données utilisateur, alors il doit aller dans un objet de modèle de données dédié (qui est soit un singleton ou accessible via le délégué de l'application.)

Questions connexes