首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅限NSFetchRequest多对一最新版本

仅限NSFetchRequest多对一最新版本
EN

Stack Overflow用户
提问于 2014-03-07 17:33:52
回答 1查看 84关注 0票数 0

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

示例:

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

团队<-->>员工

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

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

任何想法都非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2014-03-07 18:10:04

适当的sortDescriptor和设置为1fetchBatchSize应该可以完成此任务。

代码语言:javascript
复制
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就能做到这一点。但如果你仔细想想,这是非常合乎逻辑的。

代码语言:javascript
复制
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对象,请注意,对于此任务,我们可以使用faults,而不需要获取关系。然后,对于每个Team,我们都会得到最新的播放器。这不是“一行”的解决方案,但它做了它的工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22246324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档