NSPredicate 将 NIL 字符串作为任何字符处理
NSPredicate to handle NIL string as ANY character
我有一个 NSPredicate
看起来像这样:
NSPredicate *predicateSearch;
if ([category_array count]>0 && [location_array count]>0) {
predicateSearch =[NSPredicate predicateWithFormat:@"category_id IN %@ AND location_id IN %@ AND company_title CONTAINS %@",category_array,location_array,searchStr];
}
else if ([category_array count]>0){
predicateSearch =[NSPredicate predicateWithFormat:@"category_id IN %@ AND company_title CONTAINS %@",category_array,searchStr];
}
else if([location_array count]>0){
predicateSearch = [NSPredicate predicateWithFormat:@"location_id IN %@ AND company_title CONTAINS %@",location_array,searchStr];
}
[fetchRequest setPredicate:predicateSearch];
由于 NSPredicate
无法处理 Nil
值,我使用此 If 语句来格式化谓词并将 Nil
值处理为 'ANY'。
这里的问题是,如果 searchStr 是 Nil
,我还希望将其处理为 'ANY'。
在 Nil
的情况下,我试图将其设置为空字符串,但它不起作用。
有什么方法可以在不对每种情况使用任何 If 语句的情况下实现这一点(9 个 if 语句太多了)?
使用复合谓词。例如,根据您发布的内容:
NSPredicate *categoryPredicate = (category_array.count > 0)
? [NSPredicate predicateWithFormat:@"category_id IN %@", category_array]
: [NSPredicate predicateWithValue:YES];
NSPredicate *locationPredicate = (category_array.count > 0)
? [NSPredicate predicateWithFormat:@"location_id IN %@", location_array]
: [NSPredicate predicateWithValue:YES];
NSPredicate *searchPredicate = (searchStr.length > 0)
? [NSPredicate predicateWithFormat:@"company_title CONTAINS %@", searchStr]
: [NSPredicate predicateWithValue:YES];
NSCompoundPredicate *predicate =
[NSCompoundPredicate
andPredicateWithSubpredicates:@[
categoryPredicate,
locationPredicate,
searchPredicate,
]
];
我有一个 NSPredicate
看起来像这样:
NSPredicate *predicateSearch;
if ([category_array count]>0 && [location_array count]>0) {
predicateSearch =[NSPredicate predicateWithFormat:@"category_id IN %@ AND location_id IN %@ AND company_title CONTAINS %@",category_array,location_array,searchStr];
}
else if ([category_array count]>0){
predicateSearch =[NSPredicate predicateWithFormat:@"category_id IN %@ AND company_title CONTAINS %@",category_array,searchStr];
}
else if([location_array count]>0){
predicateSearch = [NSPredicate predicateWithFormat:@"location_id IN %@ AND company_title CONTAINS %@",location_array,searchStr];
}
[fetchRequest setPredicate:predicateSearch];
由于 NSPredicate
无法处理 Nil
值,我使用此 If 语句来格式化谓词并将 Nil
值处理为 'ANY'。
这里的问题是,如果 searchStr 是 Nil
,我还希望将其处理为 'ANY'。
在 Nil
的情况下,我试图将其设置为空字符串,但它不起作用。
有什么方法可以在不对每种情况使用任何 If 语句的情况下实现这一点(9 个 if 语句太多了)?
使用复合谓词。例如,根据您发布的内容:
NSPredicate *categoryPredicate = (category_array.count > 0)
? [NSPredicate predicateWithFormat:@"category_id IN %@", category_array]
: [NSPredicate predicateWithValue:YES];
NSPredicate *locationPredicate = (category_array.count > 0)
? [NSPredicate predicateWithFormat:@"location_id IN %@", location_array]
: [NSPredicate predicateWithValue:YES];
NSPredicate *searchPredicate = (searchStr.length > 0)
? [NSPredicate predicateWithFormat:@"company_title CONTAINS %@", searchStr]
: [NSPredicate predicateWithValue:YES];
NSCompoundPredicate *predicate =
[NSCompoundPredicate
andPredicateWithSubpredicates:@[
categoryPredicate,
locationPredicate,
searchPredicate,
]
];