述語を使用して Core Data ストアから結果をフェッチする際に問題が発生しています。私のアプリケーションが行うことは、1 つ以上の述語に基づいてストアから結果をフェッチし、すべての述語に基づく結果または各述語に基づく結果のいずれかを表示することです。
「未満」クエリを機能させることができないことを除いて、ほとんどの場合は正常に機能します。私が使用しているコードは次のとおりです。
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;
'more than' 述語のコードは正常に機能し、> 1970 (年) などのクエリのデータ セットを返します。< 1970 などの「未満」述語を使用してフィルター処理しようとすると、Core Data データセット全体 (フィルター処理されていない) が返されます。
[[activeValue 値] 値] は NSNumber です。
私は一生それを理解することはできません-述語はまったく同じですが、1文字が異なります!
助けていただければ幸いです。さらにコード/情報が必要な場合はお知らせください。
編集: 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 のデータ型は、(アプリではなく) インポートする前にチェックするので、正しいことが保証されています。特定の dataType (value.attribute.dataType == 1 で 1 が列挙型の数値であるなど) が必要であることを明示的に示す述語を作成しても、まだ機能しません。それは本当に奇妙です。