gpt4 book ai didi

objective-c - 如何使用 NSPredicate 基于子元素进行过滤?

转载 作者:搜寻专家 更新时间:2023-10-30 19:58:35 27 4
gpt4 key购买 nike

我正在使用核心数据;假设我在员工和部门之间有一个多对一的关系,员工存储在每个部门的 NSSet 中。我想找到所有只有一名员工的部门。我如何使用 Core Data 做到这一点?

我尝试了下面的代码,我得到一个异常,说 MYEmployee 没有响应 allObjects

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF.employees.allObjects.count == 1"];
singleEmployeeDepartments = [[myModelController allDepartments] filteredArrayUsingPredicate:predicate]];

最佳答案

首先,您在这里没有有效地使用 Core Data,因为您总是从数据存储中获取所有部门,然后在内存中过滤结果数组。您可以直接查询托管对象上下文以查找匹配的部门,而不是获取所有部门,这样可以减少内存消耗,如果您有很多部门,速度也可能更快。

NSManagedObjectContext *moc = ...;
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:[NSEntityDescription entityForName:@"Department" inManagedObjectContext:moc]];
[request setPredicate:[NSPredicate predicateWithFormat:@"employees.@count == 1"]];
NSArray *singleEmployeeDepartments = [moc executeFetchRequest:request error:NULL];

另一个关键部分是在谓词字符串中使用@count 运算符来查询具有特定员 worker 数的部门。

关于objective-c - 如何使用 NSPredicate 基于子元素进行过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6006289/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com