NSPredicate用于多个对象和属性

时间:2015-05-21 17:14:16

标签: ios objective-c cocoa

我有以下扩展方法来搜索数组:

- (NSArray *)searchItemsForTerm:(NSString *)term;
{
    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"name contains[c] %@", term];
    return [[self filteredArrayUsingPredicate:resultPredicate] copy];
}

有时,阵列中的所有对象都没有" name"属性。在这种情况下,我得到一个例外。 有没有办法创建这个谓词,可以忽略任何不存在的属性?

谢谢!

1 个答案:

答案 0 :(得分:2)

类似的东西:

- (NSArray *)searchItemsForTerm:(NSString *)term;
{
    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"name contains[c] %@", term];
    NSArray *filteredArray = [self filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
        if ([evaluatedObject respondsToSelector:@selector(name)]) {
            return [resultPredicate evaluateWithObject:evaluatedObject];
        }
        return NO;
    }]];

    return filteredArray;
}