NSPredicate检查对象的属性是否退出,如果是,则获取它

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSPredicate检查对象的属性是否退出,如果是,则获取它相关的知识,希望对你有一定的参考价值。

我甚至不确定这是可能的,但如果确实如此,它肯定会有所帮助。

我有NSArrayNSDictionaries。

每个字典都有某些键(显然)。

Dict{ 
 Title: WBCCount
 Cat: Lab
}
Dict{
 Title: HbM
 Cat: Lab
 Sex: Male
}
Dict{
 Title: HbF
 Cat: Lab
 Sex: Female
}
Dict{
  Title: PC_Count
  Cat: CBC
  Sex: Female
}

我想过滤数组的字典有Cat = 'Lab'和IF Sex作为关键字存在于字典对象中,得到一个Male

总之,我不能放在一起

predicateWithFormate:%@" Cat = Lab AND ( if Sex key is present, Sex = Male";

这会让我得到一系列的WBC, HbM

我不知道这是否可能,谓词中的一个条件,但如果它是通过Web API发送对象的方式,它将是一个救生员。

如果不是这样,任何其他实现目标的方式也会很棒。

虽然我们是核心数据的主题,但这应该很简单:我希望实体的属性能够存储NSDateNSNumberNSString。有一个简单的方法吗?

答案

这里的诀窍是,在NSDictionary中,一个非现有键只返回nil

NSArray *dictionaries = @[
    @{ @"Title": @"T1",  @"Cat":   @"Lab",   @"Sex":   @"Male"   },
    @{ @"Title": @"T2",  @"Cat":   @"C2"                         },
    @{ @"Title": @"T3",  @"Cat":   @"Lab",   @"Sex":   @"Female" },
    @{ @"Title": @"T4",  @"Cat":   @"Lab"                        }
];                    

NSPredicate *pred = [NSPredicate predicateWithFormat:@"(Sex == nil OR Sex = 'Male') AND Cat = 'Lab'" ];

NSArray *result = [dictionaries filteredArrayUsingPredicate:pred];
另一答案

用于检查密钥存在的另一种语法(但仅适用于集合)是:

NSPredicate *p = [NSPredicate predicateWithFormat:@"Sex in SELF"]

我经常在Parse.com上使用它

以上是关于NSPredicate检查对象的属性是否退出,如果是,则获取它的主要内容,如果未能解决你的问题,请参考以下文章

iPhone NSPredicate 如何创建一个检查属性是不是有值的谓词?

NSPredicate 使用核心数据实体的属性

如何设置 NSPredicate 来检查关系的属性?

一个可以递归遍历对象图的 NSPredicate?

如何将 @FetchRequest 属性包装器的新 nsPredicate 动态属性与传递给 View 的对象一起使用

NSPredicate 检查对象类的种类