OutlineView dataSource & CoreData
Mick
Membre
Bonjour,
J'ai une outlineView à peupler par une dataSource. Mon modèle de données est un dataModel coreData.
L'outlineView est sensée afficher simplement les noms de "Niveau", et on doit pouvoir "expander" afin de voir les noms des "Classe" du niveau (niveau a une relationship to-many lesClasses)
J'ai donc tenté le code suivant :
Mais cela bricole, je n'ai donc pas la bonne technique. Quelqu'un peut-il me dire ce qui ne va pas ?..
J'ai une outlineView à peupler par une dataSource. Mon modèle de données est un dataModel coreData.
L'outlineView est sensée afficher simplement les noms de "Niveau", et on doit pouvoir "expander" afin de voir les noms des "Classe" du niveau (niveau a une relationship to-many lesClasses)
J'ai donc tenté le code suivant :
<br />
- ([color=#743fa4]NSArray[/color] *)sortedClassesOfLevel:([color=#743fa4]NSManagedObject[/color] *)level {<br />
[color=#743fa4]NSSet[/color] *lesClasses=[level [color=#40207c]valueForKey[/color]:[color=#d62c24]@"lesClasses"[/color]];[color=#743fa4]<br />
NSSortDescriptor[color=#000000] *sort=[[[/color]NSSortDescriptor[color=#000000] [/color][color=#40207c]alloc[/color][color=#000000]] [/color][color=#40207c]initWithKey[/color][color=#000000]:[/color][color=#d62c24]@"nom"[/color][/color]<br />
[color=#40207c]ascending[/color]:[color=#c02d9d]YES[/color]];[color=#40207c]<br />
[color=#743fa4]NSArray[/color][color=#000000] *sortedClasses=[lesClasses [/color]sortedArrayUsingDescriptors[color=#000000]:[[/color][color=#743fa4]NSArray[/color][color=#000000] [/color]arrayWithObject[color=#000000]:sort]];[/color][/color]<br />
[sort [color=#40207c]release[/color]];<br />
[color=#c02d9d]return[/color] sortedClasses;<br />
}<br />
- ([color=#743fa4]NSArray[/color] *)lesNiveaux {[color=#743fa4]<br />
NSFetchRequest[color=#000000] *req=[[[[/color]NSFetchRequest[color=#000000] [/color][color=#40207c]alloc[/color][color=#000000]] [/color][color=#40207c]init[/color][color=#000000]] [/color][color=#40207c]autorelease[/color][color=#000000]];[/color][/color][color=#40207c]<br />
[color=#000000][req [/color]setEntity[color=#000000]:[[/color][color=#743fa4]NSEntityDescription[/color][color=#000000] [/color]entityForName[color=#000000]:[/color][color=#d62c24]@"Niveau"[/color][/color][color=#40207c]<br />
[color=#000000] [/color]inManagedObjectContext[color=#000000]:[/color][color=#4b8186]managedObjectContext[/color][color=#000000]]];[/color][/color]<br />
[color=#743fa4]NSArray[/color] *lesNiveaux=[[color=#4b8186]managedObjectContext[/color] [color=#40207c]executeFetchRequest[/color]:req [color=#40207c]error[/color]:[color=#c02d9d]nil[/color]];<br />
[color=#c02d9d]return[/color] lesNiveaux;<br />
}<br />
- ([color=#743fa4]NSInteger[/color])outlineView:([color=#743fa4]NSOutlineView[/color] *)outlineView numberOfChildrenOfItem:([color=#c02d9d]id[/color])item {[color=#008324]<br />
//Si c'est le root, le nombre d'enfants est le nombre de niveaux[/color]<br />
[color=#c02d9d]if[/color] (item==[color=#c02d9d]nil[/color]) {<br />
[color=#743fa4]NSArray[/color] *lesNiveaux=[[color=#c02d9d]self[/color] [color=#2e595d]lesNiveaux[/color]];<br />
[color=#c02d9d]return[/color] [lesNiveaux [color=#40207c]count[/color]];<br />
}[color=#008324]<br />
//Si c'est un niveau, il faut trouver combien il y a de classes dans ce niveau[/color]<br />
[color=#c02d9d]if[/color] ([[item [color=#40207c]entity[/color]] [color=#40207c]name[/color]]==[color=#d62c24]@"Niveau"[/color]) {<br />
[color=#743fa4]NSArray[/color] *lesClasses=[[color=#c02d9d]self[/color] [color=#2e595d]sortedClassesOfLevel[/color]:item];<br />
[color=#c02d9d]return[/color] [lesClasses [color=#40207c]count[/color]];<br />
}[color=#c02d9d]<br />
return[color=#000000] [/color][color=#2f2fd0]0[/color][color=#000000];[/color][/color]<br />
}<br />
- ([color=#c02d9d]BOOL[/color])outlineView:([color=#743fa4]NSOutlineView[/color] *)outlineView isItemExpandable:([color=#c02d9d]id[/color])item {[color=#008324]<br />
//Si c'est un niveau, il est expandable, sinon non[/color]<br />
[color=#c02d9d]if[/color] (item==[color=#c02d9d]nil[/color]) [color=#c02d9d]return[/color] [color=#c02d9d]NO[/color];<br />
[color=#c02d9d]return[/color] [[item [color=#40207c]entity[/color]] [color=#40207c]name[/color]]==[color=#d62c24]@"Niveau"[/color] ? [color=#c02d9d]YES[/color] : [color=#c02d9d]NO[/color];<br />
}<br />
- ([color=#c02d9d]id[/color])outlineView:([color=#743fa4]NSOutlineView[/color] *)outlineView child:([color=#743fa4]NSInteger[/color])index ofItem:([color=#c02d9d]id[/color])item {[color=#008324]<br />
//Si c'est le root, il faut les niveaux tries par ordre alphabetique (a voir apres pour faire mieux)[/color]<br />
[color=#743fa4]NSArray[/color] *lesNiveaux=[[color=#c02d9d]self[/color] [color=#2e595d]lesNiveaux[/color]];<br />
[color=#c02d9d]if[/color] (item==[color=#c02d9d]nil[/color]) {<br />
[color=#c02d9d]return[/color] [lesNiveaux [color=#40207c]objectAtIndex[/color]:index];<br />
}[color=#008324]<br />
//Si c'est un niveau on cherche les classes tries par ordre aplphabetique[/color]<br />
[color=#c02d9d]if[/color] ([item [color=#40207c]class[/color]]==[[color=#743fa4]NSManagedObject[/color] [color=#40207c]class[/color]]) {[color=#008324]<br />
//Si c'est un niveau on cherche les classes tries par ordre aplphabetique[/color]<br />
[color=#c02d9d]if[/color] ([[item entity ][color=#40207c]name[/color]]==[color=#d62c24]@"Niveau"[/color]) {<br />
[color=#743fa4]NSArray[/color] *lesClasses=[[color=#c02d9d]self[/color] [color=#2e595d]sortedClassesOfLevel[/color]:item];<br />
[color=#c02d9d]return[/color] [lesClasses [color=#40207c]objectAtIndex[/color]:index];<br />
}<br />
}[color=#008324]<br />
//Normalement, on n'arrive jamais ici ...[/color][color=#c02d9d]<br />
return[color=#000000] [/color]nil[color=#000000];[/color][/color]<br />
}<br />
- ([color=#c02d9d]id[/color])outlineView:([color=#743fa4]NSOutlineView[/color] *)outlineView objectValueForTableColumn:([color=#743fa4]NSTableColumn[/color] *)tableColumn byItem:([color=#c02d9d]id[/color])item {<br />
[color=#c02d9d]return[/color] item==[color=#c02d9d]nil[/color] ? [color=#d62c24]@""[/color] : [item [color=#40207c]valueForKey[/color]:[color=#d62c24]@"nom"[/color]];<br />
}<br />
Mais cela bricole, je n'ai donc pas la bonne technique. Quelqu'un peut-il me dire ce qui ne va pas ?..
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je ne comprends pas pourquoi je dois refaire une arborescence alors que mon dataModel l'a déjà /crazy.gif' class='bbc_emoticon' alt=' ' /> . Je seul soucis est peut-être la performance vu que je reconstruis l'arborescence à chaque reloadData. (il n'y a pas non plus 600 niveaux contenant chacuns 3000 classes...)
Si ça peut servir à quelqu'un ... (j'aime bien répondre à mes propres questions !) /wink.png' class='bbc_emoticon' alt=';)' />