在iOS 10.0.1和Xcode 8.0上,我有一个CKQuery,它成功地返回各种条件下的数据(BEGINSWITH,等于某些字符串,等等)。现在,我在其中一个字段中专门查找带有空值的记录。
根据苹果的Docs,加上如何设置NSPredicate以查找具有nil属性的对象和带有布尔值的NSPredicate不是将布尔值与否进行比较。,下面的语法应该搜索零值:
NSPredicate *searchConditions = [NSPredicate predicateWithFormat:@"joiner = nil "];
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"availableURLs"
predicate:searchConditions];当我设置一个断点并检查searchConditions时,它的计算结果为joiner == nil。当我尝试使用它时,第二行抛出一个异常:
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}}})'我尝试过=、==、nil、Nil、NIL和NULL的每一个组合。所有的计算结果都是joiner == nil并抛出异常。
在第一个链接问题中,OP使用predicateWithSubstitutionVariables在[NSNull null]中替代。我也试过了,但是它再次评估了joiner == nil,并抛出了相同的异常。
Apple Docs有一个关于搜索零的详细章节,我看不出他们的例子与我的例子有什么不同:
predicate = [NSPredicate predicateWithFormat:@"firstName = nil"];我在这里错过了什么?
发布于 2016-10-11 16:13:40
根据CKQuery文档的说法,CKQuery似乎不允许在谓词中使用nil (在编写答案时在iOS 10中)。
构建谓词 NSPredicate对象定义用于确定记录是否与查询匹配的逻辑条件。CKQuery类只支持完整NSPredicate类提供的谓词行为的子集。
您的NSPredicate构造似乎没有错,因为它可以工作在自定义对象的NSArray上。
https://stackoverflow.com/questions/39970928
复制相似问题