Ios 使用NSPredicate搜索NIL的CKQuery始终引发无效的表达式错误
在iOS 10.0.1和Xcode 8.0上,我有一个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
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"];