如何使用Predicate从核心数据中获取偶数和奇数值

我想从我的核心数据实体中获取偶数和奇数值,请查看下面的代码并更正,因为它会破坏应用程序。

NSPredicate *predicate; if ([leadFilter.rank isEqualToString:@"Even"]) { predicate = [NSPredicate predicateWithFormat:@"(street%2) = 0"]; } else predicate = [NSPredicate predicateWithFormat:@"street%2 != 0)"]; [predicateArray addObject:predicate]; 

它的说法无法解析街道%2 = 0。

您可以直接在Core Data中执行此操作,但语法有点毛茸茸。 要仅获取偶数street值,请按以下方式设置您的提取:

 NSExpression *evenOddExpression = [NSExpression expressionWithFormat:@"modulus:by:(%K,2)", @"street"]; NSFetchRequest *evenOddFetch = [NSFetchRequest fetchRequestWithEntityName:@"ENTITY_NAME"]; NSExpression *zeroExpression = [NSExpression expressionForConstantValue:@0]; NSPredicate *evenOnly = [NSComparisonPredicate predicateWithLeftExpression:evenOddExpression rightExpression:zeroExpression modifier:NSDirectPredicateModifier type:NSEqualToPredicateOperatorType options:0]; evenOddFetch.predicate = evenOnly; 

结果将是任何一个管理对象具有偶数值的street

更新 :在Marcus指出实际上并不需要NSDictionaryResultType之后更简单。

不支持谓词中的这种数学运算。

解决方法:

NSManagedObject子类中创建一个布尔计算属性isEven

 - (BOOL)isEven { return self.street % 2 == 0 } 

并在谓词中使用格式isEven == TRUEisEven == FALSE

 predicate = [NSPredicate predicateWithFormat:@"isEven == TRUE)"];