J'ai une classe singleton utilisée pour afficher des données sur plusieurs vues.Mise à jour de la table lors de l'insertion/de la suppression de lignes
Il existe un TableView qui est utilisé pour supprimer/insérer des lignes. J'ai un bouton qui change entre Edit/Done pour permettre l'édition. « Cours d'eau est une variable au sein de la classe Singleton »
Et utiliser editingStyleForRowAtIndexPath pour permettre de choisir le style d'édition est utilisé pour chaque ligne.
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
int count = [streams count];
int row = indexPath.row ;
if (row == count)
return UITableViewCellEditingStyleInsert;
else
return UITableViewCellEditingStyleDelete;}
J'utilise cellForRowAtIndexPath pour créer une ligne supplémentaire avec le texte « Ajouter numéro de téléphone » en mode d'édition.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *DeleteMeCellIdentifier = @"AudioCellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:
DeleteMeCellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:DeleteMeCellIdentifier] autorelease];
}
int x = indexPath.row;
if (self.editing == YES)
{
if (indexPath.row == [streams count])
cell.textLabel.text = @"Add Phone Number";
else
cell.textLabel.text = [self.streams objectAtIndex:indexPath.row];
}
else
{
cell.textLabel.text = [self.streams objectAtIndex:indexPath.row];
}
return cell;}
La suppression des lignes fonctionne correctement. En choisissant d'insérer une ligne, une autre vue est poussée sur la pile. À partir de cette vue, l'utilisateur dispose d'un certain nombre d'options de texte pour étiqueter la nouvelle ligne que nous venons de créer. Le code suivant est utilisé pour mettre à jour la classe singleton une fois qu'une sélection a été faite.
- (void)viewWillDisappear:(BOOL)animated {
Disc *disc = [Disc sharedDisc];
[disc.streams insertObject:@"0208" atIndex:0];
[super viewDidAppear:animated];}
Une fois que le texte de la ligne a été sélectionné à l'utilisateur doit sélectionner le bouton retour pour revenir à la TableView précédente. Voici quand le problème se pose. Dans le TableView principal, au lieu d'une option intitulée "Ajouter un numéro de téléphone" il y en a deux.
Je sais que la classe singelton que TableView utilise a été mise à jour, c'est le TableView qui ne se met pas à jour correctement. Si je passe ensuite entre Édition/Terminé, le tableau affiche les informations correctement.
J'ai essayé de mettre à jour la classe singleton dans les méthodes ViewDidLoad & ViewWillAppear mais le résultat est le même, la première fois que la vue est rechargée elle n'affiche pas correctement la nouvelle ligne.
J'ai pensé à remplacer le BarButton "Retour" pour essayer d'afficher correctement TableView.
Merci Henrik. Les doublons apparaissent malgré l'utilisation de ViewDidLoad ou de ViewWillAppear. J'aurais dû mentionner que oui, il y a deux ViewControllers utilisés. Si je modifie le code de sorte que l'ajout d'une ligne ne pousse pas une nouvelle vue mais met à jour la classe Singeton et appelle ensuite [tableView Reload data] cela fonctionne parfaitement.Le problème se pose lors de la mise à jour du singelton à partir d'un second tableauView et de la navigation vers le premier tableauView. – user244295