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

How to fetch even and odd values from core data using 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。

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

解决方法:

NSManagedObject 子类

中创建布尔计算 属性 isEven
- (BOOL)isEven
{
   return self.street % 2 == 0
}

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

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

您可以直接在 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 实际上并不需要之后变得更简单。