ios – 如何创建一个比较对象所有属性的谓词?

前端之家收集整理的这篇文章主要介绍了ios – 如何创建一个比较对象所有属性的谓词?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
例如,我有一个具有三个属性的对象:firstName,middleName,lastName.

如果我想使用NSPredicate在所有属性搜索字符串“john”.

而不是像以下那样创建谓词:

[NSPredicate predicateWithFormat:@“(firstName包含[cd]%@)OR(lastName包含[cd]%@)OR(middleName包含[cd]%@)”,@“john”,@“john “];

我可以这样做:

[NSPredicate predicateWithFormat:@“(全部包含[cd]%@),@”john“];

解决方法

“all contains”在谓词中不起作用,并且(据我所知),没有类似的语法来获得所需的结果.

以下代码从实体中的所有“String”属性创建“复合谓词”:

  1. NSString *searchText = @"john";
  2. NSEntityDescription *entity = [NSEntityDescription entityForName:@"Entity" inManagedObjectContext:context];
  3. NSMutableArray *subPredicates = [NSMutableArray array];
  4. for (NSAttributeDescription *attr in [entity properties]) {
  5. if ([attr isKindOfClass:[NSAttributeDescription class]]) {
  6. if ([attr attributeType] == NSStringAttributeType) {
  7. NSPredicate *tmp = [NSPredicate predicateWithFormat:@"%K CONTAINS[cd] %@",[attr name],searchText];
  8. [subPredicates addObject:tmp];
  9. }
  10. }
  11. }
  12. NSPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:subPredicates];
  13.  
  14. NSLog(@"%@",predicate);
  15. // firstName CONTAINS[cd] "john" OR lastName CONTAINS[cd] "john" OR middleName CONTAINS[cd] "john"

猜你在找的iOS相关文章