NSFetchRequest只有多对一的最新版本

时间:2014-03-07 09:33:52

标签: ios core-data nspredicate nsfetchrequest many-to-one

我正在努力找出以多对一关系检索单个最新结果的最有效方法。

示例:

实体A - 团队(姓名) 实体B - 员工(姓名,已创建)

团队< - >>雇员

我想在Employee上创建一个获取请求,该请求返回每个团队最近创建的员工。

显然,我可以迭代团队,然后运行第二个请求,找到该团队的最新员工,但如果有数百个团队和数千名员工的潜力,这可能会非常繁重。

任何想法都非常感激。

1 个答案:

答案 0 :(得分:1)

正确的sortDescriptor和设置为fetchBatchSize的{​​{1}}应该可以解决问题。

1

编辑:此时我终于明白了这个问题:如何让每个团队中的最新员工。 我认为只用一个NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Employee"]; fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES]]; fetchRequest.fetchBatchSize = 1; NSError *error = nil; NSArray *results = [context executeFetchRequest:fetchRequest error:&error]; 就可以做到这一点。但是如果你考虑一下,这是合乎逻辑的。

fetchRequest

首先添加所有NSFetchRequest *allTeamsFetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Team"]; allTeamsFetchRequest.returnsObjectsAsFaults = YES; NSArray *teams = [context executeFetchRequest:allTeamsFetchRequest error:&error]; NSMutableArray *newPlayers = [NSMutableArray array]; for (NSManagedObject *team in teams) { NSFetchRequest *newPlayerFetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Employee"]; newPlayerFetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES]]; newPlayerFetchRequest.fetchBatchSize = 1; NSArray *players = [context executeFetchRequest:newPlayerFetchRequest error:&error]; [newPlayers addObjectsFromArray:players]; } 个对象,请注意,对于此任务,我们可以使用Team,无需获取关系。然后对于每个fault,我们得到最新的玩家。这不是“一线”解决方案,但它确实起到了作用。