Objective c 将For循环替换为NSPredicate For Core Data call

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

我有一个3级嵌套for循环:

        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) 至少有一个
区域
,该区域至少有一个
边界
,即所讨论的边界