NSPredicate, NsNumber numberWithFloat:0.0 (iPhone)
Привет у меня есть база данных Core Data с числовыми атрибутами. это номера NSN. Значение по умолчанию - 0.0, но когда я пытаюсь сделать некоторую выборку с NSP, я получаю "NSInvalidArgumentException", причина: "Недопустимый предикат: nil RHS" только потому, что значение атрибута равно 0.0
Предикат создается с помощью:
[NSPredicate predicateWithFormat:@"(startValue => %@) AND (endValue <= %@) AND (someId == %@)",startNSNumber,endNSNumber, idString]
Как я могу решить эту проблему?
4 ответа
Вы добавляете поплавки как объекты, а не как поплавки? Попробуй это:
[NSPredicate predicateWithFormat:@"(startValue => %f) AND (endValue <= %f) AND (someId == %@)",startNSNumber,endNSNumber, idString];
Я твердо верю, что одна из ваших переменных равна нулю или была автоматически освобождена...
попробуй это:
NSNumber *num1 = [NSNumber numberWithFloat:2.0];
NSNumber *num2 = [NSNumber numberWithFloat:3.0];
NSString *str = @"Test";
[NSPredicate predicateWithFormat:@"(startValue => %@) AND (endValue <= %@) AND (someId == %@)", num1, num2, str];
Если это удастся, то проблема с вашими переменными.
Если вы ожидаете либо num1
или же num2
быть nil
иногда, вы можете переписать предикат как:
[NSPredicate predicateWithFormat:@"(startValue => %@) AND (endValue <= %@) AND (someId == %@)", num1 ? num1 : [NSNumber numberWithFloat:0.0], num2 ? num2 : [NSNumber numberWithFloat:0.0], idString];
Что ж, учитывая предоставленный вами предикат, простой ответ:
Или startNSNumber
, endNSNumber
или же idString
ноль Если вы хотите сравнить что-то с nil
в NSPredicate
нужно подставить в [NSNull null]
не nil
,
В NSpredicate используйте строковое значение как float словаря key.floatValue и легко используйте.
[NSPredicate predicateWithFormat:@"(startValue.floatValue => %f) AND (endValue.floatValue <= %f) AND (someId == %@)",startNSNumber,endNSNumber, idString]
Я считаю этот пост полезным.