我有一个Card
对象数组(NSObjects),每个对象都有一个名为 的字段tags
,它是 NSStrings 的 NSArray。
然后,我想将用户的搜索词拆分为一个称为keywords
字符串的数组componentsSeparatedByString
,然后使用 NSPredicate 根据哪些元素具有包含至少 1 个关键字的标签来过滤我的卡片数组keywords
。
我希望这不会太复杂!我尝试使用 NSPredicateIN
子句无济于事。我该怎么做?
我有一个Card
对象数组(NSObjects),每个对象都有一个名为 的字段tags
,它是 NSStrings 的 NSArray。
然后,我想将用户的搜索词拆分为一个称为keywords
字符串的数组componentsSeparatedByString
,然后使用 NSPredicate 根据哪些元素具有包含至少 1 个关键字的标签来过滤我的卡片数组keywords
。
我希望这不会太复杂!我尝试使用 NSPredicateIN
子句无济于事。我该怎么做?
考虑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:@"*"]]]
如果这不完全正确,请不要杀了我,但是这样的事情会起作用。
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];