Можно ли получить отличные результаты при использовании NSFetchedResultsController? - PullRequest
6 голосов
/ 08 августа 2011

У меня есть поиск по продукту, который выполняет поиск по категориям продуктов, в которых находятся мои продукты, иногда мои продукты относятся к нескольким категориям, что дает мне повторяющиеся результаты. Я не хочу искать таблицу продуктов напрямую, потому что есть несколько продуктов, которые имеют несколько размеров, но в основном это один и тот же продукт.

Есть ли способ получить отчетливые результаты поиска с помощью NSFetchedResultsController?

Ответы [ 4 ]

11 голосов
/ 08 декабря 2011

Да, вы можете ...

ищите метод

- (NSFetchedResultsController *)fetchedResultsController;

и добавьте туда следующие строки (в этом примере мы получаем только отдельный атрибут "title" наших управляемых объектов):

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

Вы должны позаботиться о том, как получить доступ к значениям из NSFetchedResultsController ... Например, в

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

используйте следующий код для доступа к данным:

NSDictionary* title = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = [title objectForKey:@"title"];
8 голосов
/ 16 июня 2012

В дополнение к решению, предоставленному Shingoo, пожалуйста, не забудьте установить делегат NSFetchedResultsController на nil , чтобы отключить автоматические обновления, которыене будет работать с NSDictionaryResultType и различными значениями:

self.fetchedResultsController.delegate = nil; 
0 голосов
/ 08 августа 2011

При создании NSFetchRequest вы можете использовать -setReturnsDistinctResults: и установить его на YES.

0 голосов
/ 08 августа 2011

Вам потребуется использовать NSPredicate (см. Руководство по программированию предикатов )

Это сложно, но вы можете сделать это, используя SUBQUERY

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...