多个对象和属性的NSPredicate

4

我有以下扩展方法用于在数组中进行搜索:

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

有时数组中并非所有对象都有“name”属性。在这种情况下,我会收到异常。 是否有一种方法可以创建此谓词,以忽略任何不存在的属性?

谢谢!


你可以在你的CoreData实体中进行内省,以检查一个实体是否具有某个属性... http://oleb.net/blog/2011/05/inspecting-core-data-attributes/ - Bisca
如果您想根据实体更改属性名称,请使用 @"%K contains[c] %@", myPropertyName, term]; - Bek
1个回答

3

Something like:

- (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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接