Ajouter un object à NSMutableArray d'une autre class

J'ai une class de controller de vue appelée PresidentsViewController qui configure datatables dans un UITableView . Ces données sont sous la forme de list appelée NSMutableArray . J'ai une autre class, PresidentAddController , qui est supposée gérer l'ajout d'un object de type President à cette list en fonction des données saisies par l'user sur un président. Cependant, je ne peux pas get l'object à append à la list. J'ai confirmé que datatables saisies par l'user pour un nouveau président sont collectées correctement, donc elles s'ajoutent à la list d'une autre class qui pose problème. Je crois que le code correct pour append un object à la list est:

 [pvc.list addObject:newPresident]; 

Cependant, je ne sais pas comment créer correctement la reference / instance /? (qui est ce que pvc serait) à PresidentsViewController à l'intérieur de PresidentAddController afin que je puisse append correctement un nouveau président à la list. Je n'utilise pas Interface Builder pour cela parce que c'est juste un UITableView.

Comment append un président à la list dans cette situation?

Edit: Voici comment le tableau est initialisé:

 @property (nonatomic, retain) NSMutableArray *list; 

Et voici comment est configuré PresidentAddController dans PresidentsViewController:

 PresidentAddController *childController = [[PresidentAddController alloc] initWithStyle:UITableViewStyleGrouped]; childController.title = @"Add President"; [self.navigationController pushViewController:childController animated:YES]; [childController release]; 

Ajoutez un pointeur à PresidentAddController cette façon:

 // in @interface PresidentsViewController *listController; @property (nonatomic, assign) PresidentsViewController *listController; // in @implementation @synthesize listController; 

Ensuite, lorsque vous instanciez votre PresidentAddController , définissez le pointeur:

 PresidentAddController *childController = [[PresidentAddController alloc] initWithStyle:UITableViewStyleGrouped]; childController.title = @"Add President"; childController.listController = self; [self.navigationController pushViewController:childController animated:YES]; [childController release]; 

Alors vous pouvez aller [listController.list addObject:newPresident]; dans PresidentAddController .

EDIT: childController.listController = self appelle childController.listController = self même [childController setListController:self] , qui lit à son tour la méthode @synthesize d dans votre implémentation et définit le pointeur *listController pour pointer vers la class actuelle (si vous écrivez du code dans la class PresidentsViewController , alors self va être l'instance actuelle de PresidentsViewController ).

La raison pour laquelle j'utilise assign est parce que si vous listController retain , alors quand vous définissez listController sur self il conservera une reference propriétaire à l'object. Cela peut causer toutes sortes de problèmes si jamais vous essayez de libérer PresidentsViewController , parce que si vous avez une reference propriétaire dans PresidentAddController alors il ne libérera pas jusqu'à ce que cette reference soit également libérée. L'utilisation de assign garantit que si vous libérez PresidentsViewController avant que PresidentAddController disparaisse, il sera correctement désalloué. Bien sûr, peut-être que vous voulez le garder dans cette situation, auquel cas l'utilisation de retain ici est également très bien.

Mon soupçon ici serait que vous avez une propriété définie comme @property (nonatomic,copy) NSMutableArray *list; Obtenez-vous et l'exception essayant d'append l'object dans le tableau? Si c'est le cas, c'est probablement parce que le modificateur de copy returnne une copy immuable du tableau. Essayez de créer une méthode qui prend l'object et l'ajoute à la list sans utiliser self.list … juste [list addObject] et si cela fonctionne, c'est votre problème.