首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CKQuery使用NSPredicate搜索NIL总是引发无效的表达式错误。

CKQuery使用NSPredicate搜索NIL总是引发无效的表达式错误。
EN

Stack Overflow用户
提问于 2016-10-11 05:20:08
回答 1查看 657关注 0票数 0

在iOS 10.0.1和Xcode 8.0上,我有一个CKQuery,它成功地返回各种条件下的数据(BEGINSWITH,等于某些字符串,等等)。现在,我在其中一个字段中专门查找带有空值的记录。

根据苹果的Docs,加上如何设置NSPredicate以查找具有nil属性的对象带有布尔值的NSPredicate不是将布尔值与否进行比较。,下面的语法应该搜索零值:

代码语言:javascript
运行
复制
NSPredicate *searchConditions = [NSPredicate predicateWithFormat:@"joiner = nil "];
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"availableURLs"
                                           predicate:searchConditions];

当我设置一个断点并检查searchConditions时,它的计算结果为joiner == nil。当我尝试使用它时,第二行抛出一个异常:

代码语言:javascript
运行
复制
Terminating app due to uncaught exception 'CKException', reason: 
'Invalid predicate: joiner == nil (Error Domain=CKErrorDomain Code=12
"Invalid right expression in <joiner == nil>: <nil> is not a function expression" 
UserInfo={ck_isComparisonError=true, 
NSLocalizedDescription=Invalid right expression in <joiner == nil>: <nil> is not a function expression, 
NSUnderlyingError=0x1706516d0 {Error Domain=CKErrorDomain Code=12 "<nil> is not a function expression" 
UserInfo={NSLocalizedDescription=<nil> is not a function expression, ck_isComparisonError=true}}})'

我尝试过===nilNilNILNULL的每一个组合。所有的计算结果都是joiner == nil并抛出异常。

在第一个链接问题中,OP使用predicateWithSubstitutionVariables[NSNull null]中替代。我也试过了,但是它再次评估了joiner == nil,并抛出了相同的异常。

Apple Docs有一个关于搜索零的详细章节,我看不出他们的例子与我的例子有什么不同:

代码语言:javascript
运行
复制
predicate = [NSPredicate predicateWithFormat:@"firstName = nil"];

我在这里错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-11 16:13:40

根据CKQuery文档的说法,CKQuery似乎不允许在谓词中使用nil (在编写答案时在iOS 10中)。

构建谓词 NSPredicate对象定义用于确定记录是否与查询匹配的逻辑条件。CKQuery类只支持完整NSPredicate类提供的谓词行为的子集。

您的NSPredicate构造似乎没有错,因为它可以工作在自定义对象的NSArray上。

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

https://stackoverflow.com/questions/39970928

复制
相关文章

相似问题

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