使用NSFetchedResultsController时是否可以获得明显的结果?

时间:2011-08-08 00:24:46

标签: objective-c iphone core-data nsfetchedresultscontroller

我有一个产品搜索,搜索我的产品所在的ProductCategories,有时我的产品属于多个类别,这会给我重复的结果。我不想直接搜索产品表,因为有几种产品有多种尺寸,但基本上是相同的产品。

有没有办法通过NSFetchedResultsController获取不同的搜索结果?

4 个答案:

答案 0 :(得分:11)

是的,你可以......

注意方法

- (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"];

答案 1 :(得分:8)

除了Shingoo提供的解决方案之外,请不要忘记设置 NSFetchedResultsController的 委托给nil 以禁用自动更新,不适用于 NSDictionaryResultType 和不同的值:

self.fetchedResultsController.delegate = nil; 

答案 2 :(得分:0)

您需要使用NSPredicate(请参阅Predicate Programming Guide

这很复杂,但您可以使用SUBQUERY

来完成

答案 3 :(得分:-1)

创建NSFetchRequest时,您可以使用-setReturnsDistinctResults:并将其设置为YES