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]

Я считаю этот пост полезным.

Другие вопросы по тегам