70 votes

didSelectRowAtIndexPath renvoie un IndexPath incorrect

J'ai rencontré un vraiment déroutant bug. La première ligne de mon UITableView retourne 1 et la deuxième on renvoie 0 dans le indexPath! Comment est-ce même possible?

Dans ma `-(void)viewDidLoad " tout est toujours très bien. Je suis en mettant en évidence la première ligne avec succès

currentRow = 0;
[tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:currentRow inSection:0] 
  animated:NO scrollPosition:UITableViewScrollPositionNone];

J'ai la variable currentRow pour le suivi de la ligne qui est sélectionnée (une autre de contrôle des modifications en fonction de celui qui est sélectionné).

Maintenant, dans mon " didDeselectRowAtIndexPath délégué de la fonction que j'ai:

-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
...
NSLog(@"IndexPath: %@", [indexPath description]);
}

Le journal affiche les éléments suivants:

IndexPath: <NSIndexPath 0x79509d0> 2 indexes [0, 0] quand je touche la deuxième ligne, et IndexPath: <NSIndexPath 0x79509d0> 2 indexes [0, 1] quand je touche la première ligne.

Il n'y a pas de ligne d'insertion ou de suppression ou de tri, etc., même pas de défilement. C'est une simple UITableView, regroupés style, avec de la section 1 et 3 lignes. Ce pourrait être la cause?

Merci pour votre aide,
S

229voto

KennyTM Points 232647

Vous avez mis en œuvre n'aDeselectRowAtIndexPath. Il sera déclenché lorsque la ligne est plus sélectionné.

Lorsque vous appuyez sur la deuxième ligne, la première ligne est plus sélectionné, de sorte que [0, 1] sera affiché.
Lorsque vous appuyez sur la première ligne encore une fois, la deuxième ligne est maintenant n'est plus sélectionné, de sorte que [0, 0] sera affiché.

Ces sont totalement prévu.

Mettre en œuvre neSélectionnezRowAtIndexPath si vous en avez besoin pour répondre, lorsque la ligne est sélectionnée.

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    //                                       ^
    ...

    NSLog(@"IndexPath: %@", [indexPath description]);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X