我在查询核心数据以查找一群人中的“最旧”和“最高”。对于较大的数据集,这通常起作用(因为重复匹配的机会较少),但是对于一个小数据集,其中最老的人可能也是最大的我有问题。通过NSFetchedResultsController在UITableView中显示重复的单元格?
[John, 77, 160]
[Pete, 56, 155]
[Jane, 19, 130]
[Fred, 27, 159]
[Jill, 32, 128]
,因为我想先运行2 NSFetchRequests
显示在2 UITableViewCell
个UITableView
我在做这个该信息(一个找老大,老二找到最重的),我把他们带到了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
。
获取请求不会返回重复的对象。它返回与谓词相匹配的所有对象 - 而这恰好就是您的案例中的一个对象。为什么你需要一个获取结果控制器?如果您已有2个对象,请将它们放入数组中并使用普通表视图显示。 – 2013-03-20 12:18:14
嗨马丁,这是一个很好的观点,有问题的ViewController从一个简单的列表和一个提取的结果控制器开始,当我添加额外的搜索和排序时,我一直使用现有的提取结果控制器。直到现在(测试5人而不是500人)我没有注意到任何问题,我也不知道提取请求不会返回重复的对象。我会考虑改变代码来使用你所建议的数组。谢谢,非常感谢。 – fuzzygoat 2013-03-20 12:25:06