繁体   English   中英

通过NSFetchedResultsController在UITableView中显示重复的单元格?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM