Question

Je suis au courant de l'usage commun et d'une base NSFetchedResultsController gestion des lignes d'une table, mais j'ai un problème intéressant.

Mes données sont organisées en tant que tel: Horaire <--- >> Jour <--- >> Route. J'ai actuellement une vue de table qui a des horaires avec un contrôleur de récupération de gérer la création et la suppression des annexes. Je veux maintenant créer une vue de table pour les routes / Jours.

Je voudrais à la liste d'un itinéraire sur chaque ligne, et de créer des têtes de section personnalisés qui correspondent à l'information dans le Jour. Je pourrais probablement pirater quelque chose ensemble en allant chercher toutes les routes, puis les sectionnant par la relation inverse là jour respective, mais je crains que je ne serai pas en mesure de tirer profit des méthodes de délégué du contrôleur de récupération pour mettre à jour la table lorsque objets gérés changent.

Quelqu'un at-il une expérience avec cela? Des idées sur la façon d'aller de l'avant?

Merci.

Était-ce utile?

La solution

Le NSFetchedResultsController est conçu à cet effet, de sorte que vous ne devez pas inventer la roue.

Lorsque vous initialisez votre NSFetchedResultsController, vous devriez envisager de préciser le sectionNameKeyPath. Cette propriété est exactement ce que vous devez générer automatiquement la section pour vous.

Dans votre cas, je ferais comme suit:

NSEntityDescription: @"Route"
NSPredicate: @"day = %@"
NSFetchedResultsController: sectionNameKeyPath:@"route.day"

Vous voyez ce que je veux dire, si vous avez besoin plus de code de clarification, dites-moi.

Autres conseils

Vous devez faire des recherches suite à la relation plusieurs à travers le NSSet qui est créé pour vous de représenter la route - chemin Day >> dans votre base de données. Si vous avez nommé votre relation isTraversedOn et le jour-> Calendrier comme isScheduled, ce serait quelque chose comme:

Route *route=[self.fetchedResultsController.fetchedObjects objectAtIndex:0];
for (Day *day in route.isTraversedOn) {
   Schedule *schedule = day.isScheduled;
   NSLog(@"route is traversed on %@ according to schedule %@",day.name,schedule.name);
}

le NSSet sauve juste les id réels de des objets indiqués.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top