NSPredicate 用于多个对象和属性
Posted
技术标签:
【中文标题】NSPredicate 用于多个对象和属性【英文标题】:NSPredicate for multiple objects and properties 【发布时间】:2015-05-21 17:14:15 【问题描述】:我有以下扩展方法在数组中搜索:
- (NSArray *)searchItemsForTerm:(NSString *)term;
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"name contains[c] %@", term];
return [[self filteredArrayUsingPredicate:resultPredicate] copy];
有时并非数组中的所有对象都具有“名称”属性。在这种情况下,我得到一个例外。 有没有办法创建这个可以忽略任何不存在的属性的谓词?
谢谢!
【问题讨论】:
您可以在您的 CoreData 实体中进行自省以检查实体是否具有属性...oleb.net/blog/2011/05/inspecting-core-data-attributes 如果你想根据它是什么实体来改变属性名称,使用@"%K contains[c] %@", myPropertyName, term];
【参考方案1】:
类似:
- (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;
【讨论】:
以上是关于NSPredicate 用于多个对象和属性的主要内容,如果未能解决你的问题,请参考以下文章
NSPredicate 和 BEGINSWITH with CloudKit:字段值类型不匹配