NSEnumerator -> exercice 2 chap. 5
CrazyJo
Membre
Bonjour à tous,
J'ai deux problèmes avec les deux exercices qui sont à la page 122-124 de Cocoa par la pratique.
Pour le premier où il faut que le bouton deleteButton soit desactivé lorsqu'aucune ligne est sélectionnée j'y suis presque mais quelque chose cloche.
la première fois que l'app se lance le bouton est bien grisé et se dégrise bien lorsque l'on sélectionne une ligne mais ensuite dès que je clique ailleurs (pas sur une ligne) le bouton reste toujours dégrisé... Je ne comprends pas pourquoi ca fait ça ... ca avait l'air pas méchant comme méthode...
Pour mon deuxième problème (un peu plus complexe) qui est en fait l'ex 2 du même chapitre, j'ai des soucis avec NSEnumerator. Le but est de pouvoir supprimer plusieurs lignes sélectionnées. En fait je ne comprends pas trop comme tout ca fonctionne et que fait ce enumerator et cette boucle while. Si quelqu'un pourrait m'expliquer concrètement comment toutes ces variables , cette boucle et ce enumerator fonctionnent .. je pense qu'en comprenant déjà mieux comment tout ca travail je pourrais faire fonctionner cette méthode correctement . Pour le moment sa ne marche qu'avec qu'une ligne sélectionnée si y'en a plus xCode dit :
voila merci
J'ai deux problèmes avec les deux exercices qui sont à la page 122-124 de Cocoa par la pratique.
Pour le premier où il faut que le bouton deleteButton soit desactivé lorsqu'aucune ligne est sélectionnée j'y suis presque mais quelque chose cloche.
- (void)tableViewSelectionDidChange:(NSNotification *)n{<br /> int row = [tableView selectedRow];<br /> if(row = 1){<br /> [deleteButton setEnabled:YES];} <br /> else {<br /> [deleteButton setEnabled:NO];}<br />}
la première fois que l'app se lance le bouton est bien grisé et se dégrise bien lorsque l'on sélectionne une ligne mais ensuite dès que je clique ailleurs (pas sur une ligne) le bouton reste toujours dégrisé... Je ne comprends pas pourquoi ca fait ça ... ca avait l'air pas méchant comme méthode...
Pour mon deuxième problème (un peu plus complexe) qui est en fait l'ex 2 du même chapitre, j'ai des soucis avec NSEnumerator. Le but est de pouvoir supprimer plusieurs lignes sélectionnées. En fait je ne comprends pas trop comme tout ca fonctionne et que fait ce enumerator et cette boucle while. Si quelqu'un pourrait m'expliquer concrètement comment toutes ces variables , cette boucle et ce enumerator fonctionnent .. je pense qu'en comprenant déjà mieux comment tout ca travail je pourrais faire fonctionner cette méthode correctement . Pour le moment sa ne marche qu'avec qu'une ligne sélectionnée si y'en a plus xCode dit :
2008-02-03 12:55:40.252 EmployeAugmentation[958:10b] *** -[NSCFArray objectAtIndex:]: index (2) beyond bounds (2)
2008-02-03 12:55:40.987 EmployeAugmentation[958:10b] *** -[NSCFArray objectAtIndex:]: index (2) beyond bounds (2)
- (IBAction)deleteEmployee:(id)sender{<br /> int row = [tableView selectedRow];<br /> NSNumber *anIndex;<br /> int aRow;<br /> NSEnumerator *e = [tableView selectedRowEnumerator];<br /> // une ligne a t elle était séléctionnée<br /> if(row != -1){<br /> while (anIndex = [e nextObject]) {<br /> aRow = [anIndex intValue];<br /> [employees removeObjectAtIndex:aRow];}<br /> // supprimer la/les personne/s sélectionnée/s<br /> [self updateUI];<br /> } else {<br /> NSBeep();<br /> }<br />} <br />
voila merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
(et en plus, affecte 1 à "row", mais ça c'est subsidiaire ;D)
On appelle ça une erreur de débutant en C :P
Tu as une liste et plusieurs indices à supprimer, il faut commencer par la fin, sinon si tu supprimes un indice au début, les suivants sont décalés et tous les autres indices à supprimer deviennent faux.
Réponse à ton problème avec les diverses solutions ici :
http://www.objective-cocoa.org/forum/index.php/topic,2414.html
Et c'est là qu'on sort le manuel des bonnes habitudes, dans ce genre de cas, il est recommandé d'écrire la variable à droite du = et non à gauche:
[tt]if ( 1 == row )[/tt] est correct
[tt]if ( 1 = row )[/tt] génère une erreur à la compil.
A part ça y' a beaucoup de chose qui changent comme ça dans cocoa par la pratique ? parce que là cette histoire d'effacer plusieurs lignes est nettement plus simple à comprendre avec cette nouvelle méthode...
Ah et aussi pour finir NSEnumerator sert quoi en général , c'est quand qu'on l'utilise ?
Sinon, Cocoa par la pratique date de Mac OS X 10.2, donc forcément il y a pas mal de choses qui ont changé, mais le principe est là . Le principal c'est que toi, après, tu fasses des recherches plus poussées au lieu de te conformer uniquement au livre.
Il faut surtout apprendre à utiliser la documentation et être capable de l'utiliser correctement.
Après, les 3 grandes versions de système qui ont été faites depuis ont apporté des solutions plus simples à certains problèmes, ce qui n'empêche qu'il est bon de connaà®tre les anciennes techniques.
Ceci-dit, d'une elle fonctionne toujours, et de deux quand on lit sa doc, il est précisé quelle méthode utiliser à la place