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

问题描述 投票:8回答:2

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

我有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。有一个简单的方法吗?

objective-c cocoa-touch nsdictionary nspredicate foundation
2个回答
7
投票

这里的诀窍是,在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];

5
投票

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

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

我经常在Parse.com上使用它

© www.soinside.com 2019 - 2024. All rights reserved.