Passer des objects de model d'un controller de vue à un autre dans une stack de navigation

J'ai deux UITableViewControllers. L'un affiche une list de noms et en appuyant sur n'importe quelle cellule poussera le second TableViewController qui permet à l'user d'éditer le nom dans un UITextField.

Maintenant, je suis en mesure de passer la string de nom du premier TableViewController à la seconde. (Je le fais en créant une propriété dans le second TableViewController que je mets juste avant de pousser le second TableViewController) Mais comment passer la string de nom éditée de la seconde à la première (pour que je puisse mettre à jour la première table avec le nom modifié)?

Créez une propriété masortingcielle mutable dans le premier controller et passez ce tableau et un index au second controller.

FirstController.h

@property (nonatomic,retain) NSMutableArray *mySsortingngs; 

FirstController.m

  @synthesize mySsortingngs; init { self.mySsortingngs = [NSMutableArray arrayWithCapacity:8]; } didSelectRowAtIndexPath { SecondVC *vc = [[SecondVC new]; [self.theSsortingngs addObject:@"Original Ssortingng"]; // or replaceAtIndex: indexPath.row vc.theSsortingngs = self.mySsortingngs; vc.theIndex = indexPath.row; //push detail vc. } 

SecondController.h

  @property (nonatomic, retain) NSMutableArray *theSsortingngs; @property (nonatomic ) int theIndex; 

SecondController.m

  @synthesize theSsortingngs; @synthesize theIndex; doneEditingMethod { [self.theSsortingngs replaceObjectAtIndex: self.theIndex withObject: myNewSsortingng]; } 

Je vois principalement trois options:

  1. vous pouvez définir votre model en singleton, facilement accessible depuis tous les autres objects. Dans ce cas, pensez à l'access simultané au model, il en existe;

  2. avoir le model privé au premier controller, mais au lieu de passer la string au deuxième controller, passez un pointeur au model, ainsi vous pouvez lire et écrire dessus;

  3. passer le deuxième controller un pointeur sur le premier, de sorte que vous pouvez le signaler (en appelant une méthode spécifique); C'est ok si vous sous-classz le controller, sinon vous devriez utiliser un délégué.

Une quasortingème option consisterait à utiliser des notifications, mais je pense que 1 ou 2 est la voie à suivre.

Peut-être devriez-vous jeter un coup d'œil au model de délégué qui pourrait vous faire gagner beaucoup de time! 🙂

Vous savez que c'est comme utiliser une source de données UITableView. Avec un délégué (ou une source de données), vous pouvez requestr ou définir des informations à un controller racine.

Peut-être que c'est la meilleure option! (donc google "objective-c délégué")

Bonne chance !

Sont-ils connectés par un controller de navigation?

Si oui, cela pourrait résoudre le problème

 // in SecondViewController.m NSArray* controllers = self.navigationController.viewControllers; UITableViewController* firstViewController = [controllers objectAtIndex:controllers.count-2]; 

Il y a plusieurs moyens de le faire. Personnellement, j'utilise une class tierce pour héberger des strings et je fais juste reference à cette class lorsque je me déplace entre UITableViews.