Objective c 将For循环替换为NSPredicate For Core Data call
我有一个3级嵌套for循环:Objective c 将For循环替换为NSPredicate For Core Data call,objective-c,core-data,nspredicate,Objective C,Core Data,Nspredicate,我有一个3级嵌套for循环: for (Region *region in group.associatedRegions) { for (Boundary *regionBoundary in region.boundaries) { for (Boundary *groupBoundary in group.boundaries) { if ([groupBoundary.boun
for (Region *region in group.associatedRegions) {
for (Boundary *regionBoundary in region.boundaries) {
for (Boundary *groupBoundary in group.boundaries) {
if ([groupBoundary.boundaryID isEqualToNumber:regionBoundary.boundaryID]) {
[boundarySet addObject:groupBoundary];
}
}
}
}
这很有效。它足够快,不会减慢应用程序的速度。我不喜欢它。我非常讨厌这种筑巢方式
我很确定我可以用NSPredicate
搜索来做同样的事情。我的SQL不是很好,所以我不确定从哪里开始
组
、区域
和边界
都是核心数据
NSManagedObject
s
每个组
与边界有多对多关系,与区域有1对多关系。每个区域
都与边界有多对多关系
要点是,组
有一组它可以看到的边界。区域
有一组可以看到的边界。区域
可能包含组
看不到的边界
,因此需要将其排除在外
因此,对于每个区域
,我需要找到组
和区域
都可以看到的边界集
有什么建议吗?老实说,我还没有测试过这个,甚至不知道它是否能成功解析。但是,即使它不是你想要的,它也可能为它的变体提供一些想法。假设您正在获取
边界
对象,这些对象与组
实体有关系,而这些实体又与区域
实体有关系:
NSPredicate *predicate = [NSPredicate predicateWithFormat:"SUBQUERY(groups, $G, $G = %@ AND SUBQUERY($G.associatedRegions, $R, SUBQUERY($R.boundaries, $B, self = $B).@count >0).@count >0)).@count > 0", group];
我希望这样做是获取Boundary
对象,其中:至少有一个组
a) 匹配所选的组
和
b) 至少有一个区域
,该区域至少有一个边界
,即所讨论的边界