我想从我的核心数据实体中获取偶数和奇数值,请查看下面的代码并更正,因为它会破坏应用程序。
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。
答案 0 :(得分:8)
您可以直接在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
之后,更简单了。
答案 1 :(得分:3)
不支持谓词中的这种数学。
解决方法:
在isEven
子类
NSManagedObject
- (BOOL)isEven
{
return self.street % 2 == 0
}
并在谓词中使用格式isEven == TRUE
或isEven == FALSE
。
predicate = [NSPredicate predicateWithFormat:@"isEven == TRUE)"];