8 votes

Est-il possible d'obtenir des résultats distincts en utilisant un NSFetchedResultsController ?

J'ai une recherche de produit qui recherche les ProductCategories dans lesquelles se trouvent mes produits, parfois mes produits sont dans plusieurs catégories ce qui me donne des résultats dupliqués. Je ne veux pas faire de recherche directement dans la table des produits parce qu'il y a plusieurs produits qui ont plusieurs tailles mais qui sont fondamentalement le même produit.

Existe-t-il un moyen d'obtenir des résultats de recherche distincts avec un NSFetchedResultsController ?

11voto

Shingoo Points 482

Oui, vous pouvez...

attention à la méthode

- (NSFetchedResultsController *)fetchedResultsController;

et y ajouter les lignes suivantes (dans cet exemple, nous n'obtenons que l'attribut distinct "title" de nos objets gérés) :

[fetchRequest setReturnsDistinctResults:YES];
[fetchRequest setResultType:NSDictionaryResultType];
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObject:@"title"]];
self.fetchedResultsController.delegate = nil;

il faut faire attention à la façon dont on accède aux valeurs depuis le NSFetchedResultsController... Par exemple, dans

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

utiliser le code suivant pour accéder aux données :

NSDictionary* title = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = [title objectForKey:@"title"];

8voto

AlexR Points 1439

En plus de la solution fournie par Shingoo, n'oubliez pas de fixer les Le contrôleur NSFetchedResultsController's déléguer à nil afin de désactiver les mises à jour automatiques, ce qui ne fonctionnera pas avec l'option NSDictionaryResultType et des valeurs distinctes :

self.fetchedResultsController.delegate = nil;

0voto

ferdil Points 667

Vous devez utiliser un NSPredicate (voir Guide de programmation des prédicats )

C'est complexe, mais vous pouvez le faire en utilisant une SUBQUERY

-1voto

Mark Adams Points 17189

Lors de la création de votre NSFetchRequest vous pouvez utiliser -setReturnsDistinctResults: et de le fixer à YES .

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