我想基于多个参数搜索我的eventList数组 喜欢标题,结束等... 我正在使用以下代码 当我只使用一个参数titile如[cd]%@时,它完美地运作
NSCharacterSet *whitespace = [NSCharacterSet whitespaceAndNewlineCharacterSet];
NSString *trimmed = [searchBar.text stringByTrimmingCharactersInSet:whitespace];
if([trimmed isEqualToString:@""]==NO)
{
// NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title like[cd] %@",[NSString stringWithFormat:@"*%@*", searchBar.text]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title like[cd] %@ || enddate like[cd] %@ ",[NSString stringWithFormat:@"*%@*", searchBar.text],[NSString stringWithFormat:@"*%@*", searchBar.text]];
NSLog(@"Main Array:%@",arrMain);
eventsList =(NSMutableArray*) [arrMain filteredArrayUsingPredicate:predicate];
[eventsList retain];
NSLog(@"Search Result:%@",eventsList);
[eventTable reloadData];
}
我试过用 NSPredicate 谓词= [NSPredicate predicateWithFormat:@“(标题如[cd]%@)OR(enddate like [cd]%@)”,[NSString stringWithFormat:@“%@ ”, searchBar.text],[NSString stringWithFormat:@“%@ *”,searchBar.text]];
并且它也有效但不准确,因为我正在搜索它不会显示的特定日期 但是如果我写2或p或者它只能用于某些结果...所以我可以说它不完美 和 我的enddate是格式为2012-09-04 18:28:02的字符串 任何人都可以帮助我......
答案 0 :(得分:3)
将适当的单个谓词集合组合到NSCompoundPredicate
中,如
NSMutableArray *parr = [NSMutableArray array];
if([brand_one length]) {
[parr addObject:[NSPredicate predicateWithFormat:@"(title like[cd] %@) OR (enddate like[cd] %@) ",[NSString stringWithFormat:@"*%@*", searchBar.text],[NSString stringWithFormat:@"*%@*", searchBar.text]]];
}
if([brand_two length]) {
// etc
}
NSCompoundPredicate *cpred = [NSCompoundPredicate andPredicateWithSubpredicates:parr];
您可以使用orPredicateWithSubpredicates:和.PredicateWithSubpredicates来堆叠谓词:并且NSCompoundPredicate是一个NSPredicate本身可以复合。
答案 1 :(得分:0)
完成
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(title like[cd] %@) OR (enddate like[cd] %@) ",[NSString stringWithFormat:@"*%@*", searchBar.text],[NSString stringWithFormat:@"*%@*", searchBar.text]];
我已经检查了我的数据库,它包含2012-09-04 18:28:02格式的日期,我还以其他格式显示。