[英]Showing duplicate cells in UITableView via NSFetchedResultsController?
我正在查询核心数据,以在一群人中找到“最老的”和“最沉重的”。 对于较大的数据集,这通常可以工作(因为重复匹配的机会较小),但是对于较小的数据集,其中最老的人可能也是最重的人,我遇到了问题。
[John, 77, 160]
[Pete, 56, 155]
[Jane, 19, 130]
[Fred, 27, 159]
[Jill, 32, 128]
当我想显示在2此信息UITableViewCell
一个第UITableView
,我先运行2个这样NSFetchRequests
(一个找老大,老二找到最重的),我是他们采取objectID
S代表每个被管理对象,并添加他们到我用来设置我的NSFetchRequest
的最终NSFetchedResultsController
。
// 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;
}
仅在我的UITableView
中将numberOfRows
显示为1,并且仅显示一个[John, UITableView
]。
提取请求不会返回重复的对象。 它返回所有与谓词匹配的对象。 所以
[NSPredicate predicateWithFormat: @"objectID = %@", oid]
[NSPredicate predicateWithFormat: @"(objectID = %@) OR (objectID = %@)", oid, oid]
[NSPredicate predicateWithFormat: @"objectID IN %@", @[oid, oid]]
返回具有给定对象ID的所有一个对象(如果有)。
对于您的情况,您已经具有要显示的对象。 因此,我建议将它们存储在数组中,并将其用作表视图数据源,而不是使用获取的结果控制器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.