2011-08-08 12 views
6

Mam wyszukiwanie produktu, które przeszukuje katalogi produktów, w których znajdują się moje produkty, czasami moje produkty są podzielone na wiele kategorii, co daje podwójne wyniki. Nie chcę przeszukiwać tabeli produktów bezpośrednio, ponieważ istnieje kilka produktów, które mają wiele rozmiarów, ale są w zasadzie tym samym produktem.jest możliwe uzyskanie różnych wyników przy użyciu NSFetchedResultsController?

Czy istnieje sposób na uzyskanie wyraźnych wyników wyszukiwania za pomocą NSFetchedResultsController?

Odpowiedz

11

Tak można ...

zwrócić uwagę na metody

- (NSFetchedResultsController *)fetchedResultsController; 

i dodać tam następujące linie (w tym przykładzie mamy tylko wyraźną „title” atrybut naszych zarządzanych obiektów) :

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

trzeba dbać, jak uzyskać dostęp do wartości z NSFetchedResultsController ... na przykład w

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

użyć następującego kodu dostępu do danych:

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

podczas tworzenia NSFetchRequest można użyć -setReturnsDistinctResults: i ustawić ją na YES.

+0

do użycia, że ​​musisz również ustawić setResultType: NSDictionaryResultType, który NSFetchedResultsController nie lubi – Slee

+0

@Slee: Aby być bardziej precyzyjnym: FRC nie obsługuje NSDictionaryResultType. –

8

Oprócz rozwiązania, które Shingoo przewidzianym, proszę nie zapomnij ustawić w NSFetchedResultsController zadelegat do zera w celu Aby wyłączyć automatyczne aktualizacje, które nie będą działać z NSDictionaryResultType i różnymi wartościami:

self.fetchedResultsController.delegate = nil; 
Powiązane problemy