5 votes

Comment gérer les relations de plusieurs à plusieurs avec NSFetchedResultsController ?

J'ai deux entités dans mon modèle de données (disons entitéA et entitéB), ces deux entités ont une relation de type "to-many" l'une avec l'autre.

J'ai mis en place un NSFetchedResultsController pour récupérer un ensemble d'entitésA. J'essaie maintenant de faire en sorte que les noms des sections de la tableview correspondent au titre de l'entitéB.

sectionNameKeyPath:@"entityB.title"

Cela pose un problème, car le nom de la section renvoyé par cette relation semble être ({titre1}) ou ({titre1,titre2...titreN}), évidemment en fonction du nombre d'entitésB différentes impliquées. Cela n'est pas très esthétique dans un tableau et ne permet pas de regrouper les objets comme je le souhaiterais.

Ce que je souhaite, c'est une section par titre de l'entité B, l'entité A apparaissant sous chaque section, sous plusieurs sections si nécessaire. Je ne sais pas comment je suis censé y parvenir, si je dois mettre à jour le prédicat pour que l'entité apparaisse plusieurs fois ou si je dois mettre à jour les fonctions de section et d'en-tête pour effectuer un traitement lorsque le contrôleur passe en boucle à travers les objets.

Toute aide est la bienvenue :)

Remerciements

5voto

Marcus S. Zarra Points 32178

Vous obtiendrez cela parce que l'appel @"entityB.title" va renvoyer un tableau|ensemble de titres. C'est ce que vous voyez dans la traduction :

NSSet *titles = [myEntityA valueForKeyPath@"entityB.title"];

Pour résoudre ce problème, vous devez inverser votre NSFetchedResultsController de manière à récupérer les objets EntityA. à travers Objets de l'entité B. Dans ce cas, votre sectionKeyPath (et votre tri primaire) se fera par rapport à @"title".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X