我在使用谓词从核心数据存储中获取结果时遇到问题。我的应用程序所做的是根据一个或多个谓词从存储中获取结果,并向您显示基于所有谓词的结果或基于每个谓词的结果。
它在大多数情况下都可以正常工作,除了我无法让“小于”查询工作。这是我正在使用的代码:
case CriteriaSelectionIsLessThan:
pred = [NSPredicate predicateWithFormat:@"ANY value.attribute.name == %@ AND ANY value.%@ < %@", [attribute name], keyPath, [[activeValue value] value]];
break;
case CriteriaSelectionIsMoreThan:
pred = [NSPredicate predicateWithFormat:@"ANY value.attribute.name == %@ AND ANY value.%@ > %@", [attribute name], keyPath, [[activeValue value] value]];
break;
“超过”谓词的代码工作正常,它返回查询的数据集,例如 > 1970(一年)。当我尝试使用“小于”谓词(例如 < 1970)对其进行过滤时,它会返回整个核心数据数据集(未过滤)。
[[activeValue value] value] 是一个 NSNumber。
我一辈子都想不通——谓词完全相同,但有一个字符不同!
帮助将不胜感激。如果您需要更多代码/信息,请告诉我。
编辑:这是我在从 JSON 导入时映射数据类型的方式:
[attrib setDataType:[NSNumber numberWithInteger:[[attribute valueForKey:@"type"] integerValue]]];...
// Set the correct data type of the value
switch ([[attrib dataType] integerValue]) {
case AttributeDataTypeNumber:
[value setNumberValue:[NSNumber numberWithInteger:[valueForKey integerValue]]];
break;
case AttributeDataTypeString:
[value setStringValue:(NSString *)valueForKey];
break;
case AttributeDataTypeDate: {
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"dd-MM-YYYY"];
[value setDateValue:[df dateFromString:(NSString *)valueForKey]];
}
break;
case AttributeDataTypeBool:
[value setBooleanValue:[NSNumber numberWithBool:[valueForKey boolValue]]];
break;
}
看,我的 JSON 中的数据类型保证是正确的,因为我在导入它之前检查它(而不是在应用程序中)。即使我构建了一个明确表示我想要某个数据类型的谓词(例如 value.attribute.dataType == 1 ,其中 1 是枚举中的数字),它仍然不起作用。这真的很奇怪。