首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSPredicate,NsNumber NsNumber iPhone:0.0 (iPhone)

NSPredicate,NsNumber NsNumber iPhone:0.0 (iPhone)
EN

Stack Overflow用户
提问于 2010-09-30 00:34:39
回答 4查看 8.9K关注 0票数 8

嗨,我有核心数据数据库的数字属性。他们是NSNumbers。默认值是0.0,但是当我尝试进行一些NSPredicated获取时,我得到"'NSInvalidArgumentException',原因:'Invalid predicate: nil RHS'“,因为属性值是0.0

谓词是用以下命令创建的:

代码语言:javascript
复制
[NSPredicate predicateWithFormat:@"(startValue => %@) AND (endValue <= %@) AND (someId == %@)",startNSNumber,endNSNumber, idString]

我该如何解决这个问题?

EN

回答 4

Stack Overflow用户

发布于 2010-09-30 00:40:34

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

代码语言:javascript
复制
[NSPredicate predicateWithFormat:@"(startValue => %f) AND (endValue <= %f) AND (someId == %@)",startNSNumber,endNSNumber, idString];
票数 5
EN

Stack Overflow用户

发布于 2010-09-30 03:10:17

我坚信你的一个变量是空的或者是自动释放的。

试试这个:

代码语言:javascript
复制
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];

如果成功了,那么问题出在你的变量上。

如果您希望num1num2有时为nil,则可以将谓词重写为:

代码语言:javascript
复制
[NSPredicate predicateWithFormat:@"(startValue => %@) AND (endValue <= %@) AND (someId == %@)", num1 ? num1 : [NSNumber numberWithFloat:0.0], num2 ? num2 : [NSNumber numberWithFloat:0.0], idString];
票数 2
EN

Stack Overflow用户

发布于 2010-09-30 00:41:44

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

startNSNumberendNSNumberidString均为空。如果你想把一些东西和NSPredicate中的nil进行比较,你需要替换成[NSNull null],而不是nil

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3823762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档