NSPradicate中的多个搜索参数

时间:2012-09-04 16:53:58

标签: iphone search nspredicate

我想基于多个参数搜索我的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的字符串 任何人都可以帮助我......

2 个答案:

答案 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本身可以复合。

请参阅http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCompoundPredicate_Class/Reference/Reference.html

答案 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格式的日期,我还以其他格式显示。