Ios NSPredicate查找缺失的多个可选属性

Ios NSPredicate查找缺失的多个可选属性,ios,core-data,nspredicate,Ios,Core Data,Nspredicate,CoreData结构如下所示: Item with to-many relationship (optional) to Details with Status attribute (optional) 需要查找具有特定状态的所有项目-或缺少的状态。通过实验,这是我获取的唯一一个获取所有项目的代码,其中状态为0(零、默认值和最小值) 如果可选状态完全丢失,如何同时获取项目?那么要么状态为零,要么状态缺失 即使思想关系是可选的,在实践中,当运行此代码时,它始终存在。但是,

CoreData结构如下所示:

Item with to-many relationship (optional)
    to Details
        with Status attribute (optional)
需要查找具有特定状态的所有项目-或缺少的状态。通过实验,这是我获取的唯一一个获取所有项目的代码,其中状态为0(零、默认值和最小值)

如果可选状态完全丢失,如何同时获取项目?那么要么状态为零,要么状态缺失


即使思想关系是可选的,在实践中,当运行此代码时,它始终存在。但是,状态属性可能确实缺失,因为a)它在以前的应用程序数据库版本中不存在,b)它仅在项目状态在某些详细信息中发生更改时创建,因此从用户角度来看,它完全缺失了位置属性。

找到了一个解决方案,该解决方案似乎有效:

+ (NSPredicate *)itemStatusCleanPredicate {
    return [NSPredicate predicateWithFormat:
    @"(ANY details.status.@count == 0) OR (ANY details.status IN %@)",
        @[@(StatusDefault)]]; // NSNumber 0 (zero)
};
还没有找到太多的CoreData文档,所以我只是猜测使用“@count”将告诉我该属性是否存在。至少我得到了我想要的结果:)

顺便说一句,这个QA有很好的技巧:

+ (NSPredicate *)itemStatusCleanPredicate {
    return [NSPredicate predicateWithFormat:
    @"(ANY details.status.@count == 0) OR (ANY details.status IN %@)",
        @[@(StatusDefault)]]; // NSNumber 0 (zero)
};