我实现以下自定义类:
@interface CustomObject : NSObject
@property (copy, nonatomic) NSString *primaryTag;
@property (strong, nonatomic) NSArray *secondaryTag;
@end
,并推翻它的描述方法为NSLog的语句来打印,我们明白了什么:
- (NSString *)description {
return [NSString stringWithFormat:@"primaryTag: %@, secondaryTag: %@", _primaryTag, [_secondaryTag componentsJoinedByString:@", "]];
}
然后我创建了自定义类的一些对象,并将它们添加到数组中:
NSMutableArray *objects = [NSMutableArray array];
CustomObject *obj1 = [CustomObject new];
obj1.primaryTag = @"stringToSearchFor";
obj1.secondaryTag = @[@"notTheStringToSearchFor", @"somethingElse"];
[objects addObject:obj1];
CustomObject *obj2 = [CustomObject new];
obj2.primaryTag = @"differentString";
obj2.secondaryTag = @[@"nothingWeAreLookingFor"];
[objects addObject:obj2];
CustomObject *obj3 = [CustomObject new];
obj3.primaryTag = @"anotherOne";
obj3.secondaryTag = @[@"whoCaresForThisString", @"stringToSearchFor"];
[objects addObject:obj3];
最后我创建了一个要搜索的字符串和谓词:
NSString *givenTag = @"stringToSearchFor";
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"primaryTag == %@ || secondaryTag CONTAINS[c] %@", givenTag, givenTag];
当我退出的结果我得到正确的结果:
NSLog(@"%@", [objects filteredArrayUsingPredicate:resultPredicate]);
日志:
( “primaryTag:stringToSearchFor,secondaryTag:notTheStringToSearchFor,somethingElse”, “primaryTag:anotherOne,secondaryTag:whoCaresForThisString,stringToSearchFor” )
其是OBJ1和OBJ3。正确!如果它不适合你,那么你的代码有其他问题...