2

J'utilise Core Data pour mettre en cache une quantité décente d'informations, et j'ai une relation To-Many mise en place parmi mes objets gérés. Naturellement, j'utilise un NSFetchRequest pour aller chercher un tableau du côté singulier de cette relation. Cependant, je remplis un UITableView en utilisant le côté "plusieurs" de la relation, et je voudrais qu'il soit trié par ordre alphabétique lorsque je tire les données.Est-il possible que les données de base trie la partie "plusieurs" d'une relation entre plusieurs lors d'une demande de récupération?

Si je ne suis pas clair, voici un exemple:

« employé » et « patron » sont les deux NSManagedObjects dans une relation à-plusieurs - chaque patron a beaucoup d'employés, mais les employés ont un seul patron. Après avoir récupéré un tableau de patrons, j'appuie sur un UITableViewController contenant une liste d'employés. J'aimerais que les employés soient pré-triés pendant le NSFetchRequest pour faciliter leur affichage. Est-ce possible, et comment pourrais-je y aller? Pourquoi ne pas chercher de l'inverse?

+0

Je n'ai découvert aucun moyen de le faire, mais créer une nouvelle extraction triée des données dont j'ai besoin est assez facile. – JoBu1324

Répondre

2

Je suppose que vous connaissez déjà l'identifiant unique du patron qui vous intéresse, vous pouvez donc construire un prédicat comme celui-ci:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"boss.bossId == %K", bossId]; 
NSFetchRequest *req = [[NSFetchRequest alloc] init]; 
[req setEntity:employeeEntity]; 
[req setPredicate:pred]; 

Cela devrait chercher à tout employé avec un bossId correspondant, vous pouvez ajouter un trier le descripteur à cette requête d'extraction pour trier par ordre alphabétique.

NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YESorNO]; 
NSArray *sorted = [entities sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]]; 

:

Sinon, vous pouvez saisir le tableau d'instances NSManagedObject que vous rapportez dans votre implémentation actuelle, et les trier en utilisant un descripteur de tri (suppose que votre nom d'employés est à la propriété « name ») Maintenant, remplissez votre tableview en utilisant "trié".

Note: Je suis un peu confus au sujet de pourquoi vous n'êtes pas au moyen d'un NSFetchedResultsController pour cela, car il prendrait soin de sectionner pour vous aussi.

+0

Peut-être que je ne vous comprends pas correctement, mais je pense que la première partie de votre réponse est ce dont je parlais dans le commentaire que j'ai ajouté à ma question. – JoBu1324

+0

Je pense que la deuxième partie de votre réponse fonctionnerait, mais je ne veux pas faire de tri programmatique dans la vue actuelle, car l'application utilise une quantité prodigieuse de données et je ne veux pas prendre le temps de trier les données après qu'il a été récupéré. – JoBu1324

+0

En ce qui concerne le NSFetchedResultsController, je suis nouveau dans les données de base, donc je ne l'avais pas regardé lorsque j'ai posté la question! Merci pour le conseil cependant - vous avez raison, NSFetchedResultsController est un excellent outil. Il est déjà implémenté dans l'une de mes vues de table. – JoBu1324