2010-10-05 6 views
0

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.

Répondre

0

Je ne comprenais pas vraiment pourquoi les lignes en double avaient à faire avec la mise à jour de la tableview. Mais ça sonne un peu comme si vous créiez deux tables, d'une manière ou d'une autre? Ou même deux viewcontrollers les uns sur les autres, mais je suppose que votre code de navigation est configuré correctement (l'utilisation de tabs peut provoquer cela avec un code d'initialisation de viewcontroller incorrect).

Vous voudriez absolument tout ce qui change le contenu des tables dans ViewWillAppear.

Obtenez-vous les cellules en double même lors de la mise à jour dans ViewDidLoad (normalement appelé seulement la première fois que la vue apparaît). Pour exécuter la navigation en arrière,

Si vous cherchez à actualiser les données de la table, utilisez [tableview reloadData] dans ViewWillAppear.

Si tout le reste échoue, pour tracer ce bogue, je recommande d'ajouter une expression sur l'objet tableView et de le regarder changer (en mode débogage).

+0

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

Questions connexes