0

我正在查询核心数据以在一群人中找到“最旧”和“最重”。对于较大的数据集,这通常有效(因为重复匹配的机会较小),但对于一个小数据集,其中最老的人也可能是最重的我遇到问题。

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

因为我想在 2UITableViewCell秒内显示此信息,所以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;
}

仅显示为 1 并且仅在 my中numberOfRows显示单个 [John, 77, 160]UITableView

4

1 回答 1

1

提取请求不会返回重复的对象。它返回与谓词匹配的所有对象。所以

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

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

在您的情况下,您已经拥有要显示的对象。因此,我建议将它们存储在一个数组中并将其用作表视图数据源,而不是使用获取的结果控制器。

于 2013-03-20T12:34:29.013 回答