使用NSPredicate搜索带有数组的数组

时间:2012-07-02 11:11:03

标签: objective-c ios nspredicate

我有一个Card个对象(NSObjects)数组,每个对象都有一个名为tags的字段,它是NSStrings的NSArray。

然后,我想将用户的搜索字词分成keywords字符串componentsSeparatedByString的数组,然后根据哪些元素使用NSPredicate来过滤我的数组卡片keywords中包含至少1个关键字的标签。

我希望这不是太复杂!我尝试过使用NSPredicate IN条款无济于事。我该怎么做?

2 个答案:

答案 0 :(得分:59)

考虑array包含卡片对象。

 NSArray *keyWordsList = [keywords componentSeparatedByString:@","];
 [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"ANY %K IN %@",@"tags",keyWordsList]]

编辑:

要部分搜索,您可以使用LIKE运算符。

[array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"ANY %K LIKE[cd] %@",@"tags",[partialkeyWord stringByAppendingString:@"*"]]]

答案 1 :(得分:8)

如果这不完全正确,不要杀了我,但是这样的事情会起作用。

NSArray* arrayOfCards = [NSArray array];
NSArray* keywords = [NSArray array];
NSPredicate* containsAKeyword = [NSPredicate predicateWithBlock: ^BOOL(id evaluatedObject, NSDictionary *bindings) {
    Card* card = (Card*)evaluatedObject;
    NSArray* tagArray = card.tags;
    for(NSString* tag in tagArray) {
       if( [keywords containsObject: tag] ) 
          return YES;
    }

    return NO;
}];

NSArray* result = [arrayOfCards filteredArrayUsingPredicate: containsAKeyword];