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

jas*_*nIM 8 cocoa-touch objective-c nsdictionary foundation nspredicate

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

我有一个NSArrayNSDictionarie秒.

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

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
}
Run Code Online (Sandbox Code Playgroud)

我希望用字典过滤数组,Cat = 'Lab'并且在字典对象中存在IF Sex作为键,得到一个Male.

总之,我不能放在一起

predicateWithFormate:%@" Cat = Lab AND ( if Sex key is present, Sex = Male";
Run Code Online (Sandbox Code Playgroud)

这会给我一个数组WBC, HbM.

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

如果不是这样的任何其他方式实现目标也将是伟大的.

虽然我们是Core Data的主题,但这应该很简单:我希望实体的属性能够存储NSDate或者NSNumber或者NSString.有一个简单的方法吗?

Mon*_*olo 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];
Run Code Online (Sandbox Code Playgroud)


小智 5

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

NSPredicate *p = [NSPredicate predicateWithFormat:@"Sex in SELF"]
Run Code Online (Sandbox Code Playgroud)

我经常在Parse.com上使用它