[Résolu] - Sélection d'une ligne dans une NSTableView
skimpy
Membre
Bonjour,
J'ai une NSTableView dont le content et le Selection Indexes sont liés à un Array Controller ; celui-ci est lui même lié à un Managed Object Context.
Lorsque j'ajoute une entrée dans la table, j'aimerais que celle-ci soit sélectionnée automatiquement. Pour ajouter une entrée, je procède de la façon suivante :
NSManagedObject *newItem = [NSEntityDescription insertNewObjectForEntityForName:myEntity inManagedObjectContext:yMoc];
L'entrée apparaà®t bien dans la tableview mais lorsque j'appelle la méthode suivante [myArrayController setSelectionIndexes:[NSIndexSet indexSetWithIndex:[myTableView numberOfRows] - 1]] pour sélectionner la dernière ligne insérée, il me sélectionne la 1ère ligne. Si je remplace -1 par -2, il me sélectionne l'avant dernière-ligne de la table ... c'est comme si la tableview n'était pas informée qu'une nouvelle entrée avait été faite (j'ai mis un NSLog(@Nombre de ligne : %ld, [myTableView numberOfRows]) avant et après insertion, et le nombre est identique).
Est-ce que j'ai oublié quelque chose ?
Merci.
J'ai une NSTableView dont le content et le Selection Indexes sont liés à un Array Controller ; celui-ci est lui même lié à un Managed Object Context.
Lorsque j'ajoute une entrée dans la table, j'aimerais que celle-ci soit sélectionnée automatiquement. Pour ajouter une entrée, je procède de la façon suivante :
NSManagedObject *newItem = [NSEntityDescription insertNewObjectForEntityForName:myEntity inManagedObjectContext:yMoc];
L'entrée apparaà®t bien dans la tableview mais lorsque j'appelle la méthode suivante [myArrayController setSelectionIndexes:[NSIndexSet indexSetWithIndex:[myTableView numberOfRows] - 1]] pour sélectionner la dernière ligne insérée, il me sélectionne la 1ère ligne. Si je remplace -1 par -2, il me sélectionne l'avant dernière-ligne de la table ... c'est comme si la tableview n'était pas informée qu'une nouvelle entrée avait été faite (j'ai mis un NSLog(@Nombre de ligne : %ld, [myTableView numberOfRows]) avant et après insertion, et le nombre est identique).
Est-ce que j'ai oublié quelque chose ?
Merci.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Quand tu ajoutes une entrée dans le MOC, le NSArrayController reçoit une notification KVO, puisqu'il observe le MOC.
La NSTableColumn observe le NSArrayController. À mon avis, tu changes selectionIndex avant que le NSArrayController n'ait envoyé la notification KVO de modification d'arrangedObjects.
Ce sont des problèmes temporels difficiles à régler, mais avec le débogueur, on y arrive.
Par ailleurs, il y a une case à cocher sur NSArrayController pour sélectionner automatiquement la dernière ligne (mais ça ne fonctionne pas toujours).
- J'ai un bouton Add qui appelle l'IBAction addItem. Dans addItem, voilà ce que je fais :
Par défaut, je n'ai qu'une entrée dans ma tableview. Donc au début de l'exécution de la méthode, je vois bien : Avant ajout : Nombre de ligne : 1 et après l'insertion, j'ai toujours : Après ajout : Nombre de ligne : 1. Par contre j'ai bien un numberOfItems = à 2.
Quel genre de tests supplémentaires pourrais-je faire ?
Merci.