0

我在查询核心数据以查找一群人中的“最旧”和“最高”。对于较大的数据集,这通常起作用(因为重复匹配的机会较少),但是对于一个小数据集,其中最老的人可能也是最大的我有问题。通过NSFetchedResultsController在UITableView中显示重复的单元格?

[John, 77, 160] 
[Pete, 56, 155] 
[Jane, 19, 130] 
[Fred, 27, 159] 
[Jill, 32, 128] 

,因为我想先运行2 NSFetchRequests显示在2 UITableViewCellUITableView我在做这个该信息(一个找老大,老二找到最重的),我把他们带到了objectID s,然后将它们添加到我用来设置我的NSFetchedResultsController的最后一个NSFetchRequest

// FETCH REQUEST - OLDEST, HEAVIEST 
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"People"]; 
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES]; 
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:descriptor]]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN %@", IDArray]; 
[fetchRequest setPredicate:predicate]; 

如果我在最后的NSFetchRequest的“打印说明”中确实包含2个指向managedObjects的指针。

(i.e. [John, 77, 160] [John, 77, 160]) 

我的问题似乎是,当我做

[[self fetchedResultsController] performFetch:nil]; 

UITableView委托方法:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    NSArray *sectionArray = [[self fetchedResultsController] sections]; 
    id <NSFetchedResultsSectionInfo> sectionInfo = [sectionArray objectAtIndex:0]; 
    NSUInteger numberOfRows = [sectionInfo numberOfObjects]; 
    NSLog(@"ROWS: %u", numberOfRows); 
    return numberOfRows; 
} 

只显示numberOfRows为1,只显示一个[约翰,77 ,160]在我的UITableView

+0

获取请求不会返回重复的对象。它返回与谓词相匹配的所有对象 - 而这恰好就是您的案例中的一个对象。为什么你需要一个获取结果控制器?如果您已有2个对象,请将它们放入数组中并使用普通表视图显示。 – 2013-03-20 12:18:14

+0

嗨马丁,这是一个很好的观点,有问题的ViewController从一个简单的列表和一个提取的结果控制器开始,当我添加额外的搜索和排序时,我一直使用现有的提取结果控制器。直到现在(测试5人而不是500人)我没有注意到任何问题,我也不知道提取请求不会返回重复的对象。我会考虑改变代码来使用你所建议的数组。谢谢,非常感谢。 – fuzzygoat 2013-03-20 12:25:06

回答

1

获取请求不会返回重复的对象。它返回与谓词匹配的所有对象。因此,

[NSPredicate predicateWithFormat: @"objectID = %@", oid] 
[NSPredicate predicateWithFormat: @"(objectID = %@) OR (objectID = %@)", oid, oid] 
[NSPredicate predicateWithFormat: @"objectID IN %@", @[oid, oid]] 

返回所有具有给定对象ID(如果有)的对象。

就你而言,你已经有了你想要显示的对象。因此,我建议将它们存储在一个数组中,并将其用作表视图数据源,而不是使用抓取的结果控制器。

+0

再次感谢马丁。 – fuzzygoat 2013-03-20 12:39:48

相关问题