Bonjour,
Le plus simple est, dans ton modèle, d'avoir deja tes données triées...
Imaginons que, actuellement, tu recupères toutes tes activité dans un NSSet.
Le but va être de transformer ce set (appeleons le activitiesSet) en un 1 NSDictionary qui contiendra une paire clef/valeur par section.
Pour chaque sections de ce NSDictionnary, la clef sera le jour et la valeur associée sera un NSArray contenant les activitées du jour concerné.
La premiere étape va etre, depuis activitiesSet, de recupérer toutes les dates différentes
1 2 3 4 5
|
NSMutableSet * dates = [NSMutableSet new];
[activitiesSet enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {
[dates addObject:[obj date]];
}]; |
A la fin de ce block d'instruction, dates contient une valeur par date differentes, puisque la logique d'un NSSet et de ne contenir que des objets distincts.
On à donc notre liste de dates.
Maintenant, il va falloir créer un NSDictionnary et, pour chaque date, récupérer l'ensemble des activity ayant lieu a cette date.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
NSMutableDictionary * activities = [NSMutableDictionary new];
for(id date in dates)
{
// Récupère toutes les activity à la date scannée
NSSet * activityForDate = [activitiesSet objectsPassingTest:^BOOL(id obj, BOOL *stop) {
return [[obj date] isEqual:date];
}];
// Ajoute la liste des activity recupérer au dictionnary
[activities setObject:[activityForDate allObjects] forKey:date];
} |
maintenant le dictionnaire activities contient toutes les activité, regroupé par date.
Il suffit ensuite des les affiché en repondant au methode du UITabelViewDataSource.
Pour retrouver les infos dont tu as besoin voici une petite aide:
Retrouver le nombre de section:
[[activities allKeys] count];
Retrouver la date correspondant a une section a un index donnée
[[activities allKeys] objectAtIndex:sectionIdx]
Retrouver le nombre d'élément dans une section a un index donné
[[activities objectForKey:[[activities allKeys] objectAtIndex:sectionIdx]] count];
Retrouver l'activity a un indexPath donné
objectAtIndexPath:indexPath => [[activities objectForKey:[[activities allKeys] objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row];
Cordialement,
Florian
iOS Developpeur, Consultant, Formateur iOS
Partager