2011-08-08 13 views
6

Tengo una búsqueda de productos que busca en las categorías de productos en las que están mis productos, a veces mis productos se encuentran en varias categorías, lo que me da resultados duplicados. No quiero buscar directamente en la tabla de productos porque hay varios productos que tienen varios tamaños, pero básicamente son el mismo producto.¿es posible obtener resultados distintos cuando se usa un NSFetchedResultsController?

¿Hay alguna forma de obtener resultados de búsqueda distintos con NSFetchedResultsController?

Respuesta

11

Sí se puede ...

mirada hacia fuera para el método

- (NSFetchedResultsController *)fetchedResultsController; 

y añadir allí las siguientes líneas (en este ejemplo tenemos sólo el atributo "title" distinta de nuestros objetos gestionados) :

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

hay que tener cuidado de cómo se accede a los valores de la NSFetchedResultsController ... Por ejemplo, en

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

utilizar el siguiente código para acceder a los datos:

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

que había necesidad de utilizar un NSPredicate (Ver Predicate Programming Guide)

Es complejo, pero puede hacerlo utilizando una subconsulta

+0

ferdil - ¿Puedes elaborar tu respuesta? – NSPratik

-1

Al crear su NSFetchRequest puede utilizar -setReturnsDistinctResults: y ponerlo a YES.

+0

para usarlo también debe establecer setResultType: NSDictionaryResultType que no le gusta a un NSFetchedResultsController – Slee

+0

@Slee: Para ser más precisos: FRC no admite NSDictionaryResultType. –

8

Además de la solución que Shingoo proporciona, por favor no se olvide de conjuntodelegado del de NSFetchedResultsController a cero con el fin para deshabilitar las actualizaciones automáticas, que no funcionarán con NSDictionaryResultType y valores distintos:

self.fetchedResultsController.delegate = nil; 
Cuestiones relacionadas