Ios 使用NSPredicate搜索NIL的CKQuery始终引发无效的表达式错误

Ios 使用NSPredicate搜索NIL的CKQuery始终引发无效的表达式错误,ios,objective-c,nspredicate,cloudkit,Ios,Objective C,Nspredicate,Cloudkit,在iOS 10.0.1和Xcode 8.0上,我有一个CKQuery,它成功地返回各种条件下的数据(BEGINSWITH并等于某些字符串,等等)。现在我专门在其中一个字段中查找空值的记录 根据、plus和,以下语法应搜索nil值: NSPredicate *searchConditions = [NSPredicate predicateWithFormat:@"joiner = nil "]; CKQuery *query = [[CKQuery alloc] initWithRecordTy

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

根据、plus和,以下语法应搜索nil值:

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}}})'
我错过了什么

根据,似乎
CKQuery
在谓词中不允许
nil
(在编写答案时的ios10中)

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

您的
NSPredicate
构造似乎没有错误,因为它可以处理自定义对象的
NSArray

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

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


您的
NSPredicate
构造似乎没有错误,因为它可以用于自定义对象的
NSArray

我认为问题更多地是关于
CKQuery
的限制,这将解释为什么您可以在自定义对象的
NSArray
中使用
nil
。。。没有明确说明,但是从
CKQuery
构建谓词的文档中,NSPredicate对象定义了确定记录是否与查询匹配的逻辑条件。CKQuery类只支持完整NSPredicate类提供的谓词行为的子集。
@Larme谢谢,我只是更仔细地重新阅读了CKQuery文档。我之前错过了关于仅支持nspredicate的子集的部分。如果您将此作为答案发布,我将接受,并可能帮助下一个没有仔细阅读文档的人。我认为问题更多地是关于
CKQuery
的限制,
NSPredicate
,这将解释为什么您可以在自定义对象的
NSArray
中使用
nil
。。。没有明确说明,但是从
CKQuery
构建谓词的文档中,NSPredicate对象定义了确定记录是否与查询匹配的逻辑条件。CKQuery类只支持完整NSPredicate类提供的谓词行为的子集。
@Larme谢谢,我只是更仔细地重新阅读了CKQuery文档。我之前错过了关于仅支持nspredicate的子集的部分。如果你把它作为一个答案,我会接受,也许会帮助下一个没有仔细阅读文档的人。那么,在使用CKQuery构建谓词时,是否有其他方法来测试nil?那么,在使用CKQuery构建谓词时,是否有其他方法来测试nil?
predicate = [NSPredicate predicateWithFormat:@"firstName = nil"];