NSPredicate,NsNumber numberWithFloat:0.0(iPhone)

时间:2010-09-29 16:34:39

标签: iphone nspredicate nsnumber

嗨,我拥有带有数字属性的Core Data数据库。他们是NSNumbers。默认值为0.0但是当我尝试进行一些NSPredicated提取时,我得到“'NSInvalidArgumentException',原因:'无效谓词:nil RHS'”只是因为属性值为0.0

使用以下命令创建谓词:

[NSPredicate predicateWithFormat:@"(startValue => %@) AND (endValue <= %@) AND (someId == %@)",startNSNumber,endNSNumber, idString]

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:5)

您是将浮动作为对象添加,而不是浮动?试试这个:

[NSPredicate predicateWithFormat:@"(startValue => %f) AND (endValue <= %f) AND (someId == %@)",startNSNumber,endNSNumber, idString];

答案 1 :(得分:2)

我坚信你的一个变量是零或自动释放......

试试这个:

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];

如果成功,则问题出在您的变量上。

如果您希望有时num1num2nil,那么您可以将谓词重写为:

[NSPredicate predicateWithFormat:@"(startValue => %@) AND (endValue <= %@) AND (someId == %@)", num1 ? num1 : [NSNumber numberWithFloat:0.0], num2 ? num2 : [NSNumber numberWithFloat:0.0], idString];

答案 2 :(得分:1)

好吧,考虑到你提供的谓词,简单的答案是:

startNSNumberendNSNumberidString均为零。如果您想在[{1}}中对nil的内容进行比较,则需要在NSPredicate中进行替换,而不是[NSNull null]

答案 3 :(得分:0)

IN NSpredicate使用字符串值作为浮点数字典key.floatValue并轻松使用。

[NSPredicate predicateWithFormat:@"(startValue.floatValue => %f) AND (endValue.floatValue <= %f) AND (someId == %@)",startNSNumber,endNSNumber, idString]

我觉得这篇文章很有用。