objective-c – 如何使用NSPredicate根据子元素进行过滤?
发布时间:2020-12-16 09:34:45 所属栏目:百科 来源:网络整理
导读:我正在使用核心数据;假设我在员工和部门之间有多对一的关系,员工存储在每个部门的NSSet中.我想找到只有一名员工的所有部门.如何使用Core Data执行此操作? 我尝试了下面的代码,我得到一个异常,说MYEmployee没有响应allObjects. NSPredicate *predicate = [NS
我正在使用核心数据;假设我在员工和部门之间有多对一的关系,员工存储在每个部门的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运算符来查询具有特定员工数量的部门. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- c# – azure上的静态类和多个实例
- EasyUI框架 使用Ajax提交注册信息的实现代码
- 为你的 Swift Packages 命名
- ruby-on-rails – 如何使用config.assets.precompile进行目
- 如何从xml中删除元素使用xslt with stylesheet和xsltproc?
- ruby-on-rails – 这种弃用方法如何工作?
- 正则表达式 – 从Google搜索下载前1000个图像
- 为特定请求禁用ajaxStart()和ajaxStop()
- postgresql – 如何强制将pg_xlog中的所有WAL文件合并回我的
- c# – property是readonly,但成员可以访问