在iOS 10.0.1和Xcode 8.0上,我有CKQuery
成功返回各种条件的数据(BEGINSWITH
并且等于某些字符串等)。现在我正在寻找其中一个字段中具有空值的记录。
根据Apple's Docs,加上How do I set up a NSPredicate to look for objects that have a nil attribute和NSPredicate with boolean is not comparing a boolean to NO,以下语法应搜索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}}})'
我已尝试过=
,==
,nil
,Nil
,NIL
和NULL
的所有组合。全部评估为joiner == nil
并抛出异常。
在第一个关联问题中,OP使用predicateWithSubstitutionVariables
替换[NSNull null]
。我也试过了,但它再次评估joiner == nil
并抛出相同的异常。
Apple Docs有一个专门搜索nil的部分,我看不出他们的例子与我的不同:
predicate = [NSPredicate predicateWithFormat:@"firstName = nil"];
我在这里缺少什么?
答案 0 :(得分:2)
根据CKQuery doc,似乎CKQuery
在谓词中不允许nil
(在撰写答案时在iOS 10中)。
构建谓词
NSPredicate对象定义用于确定记录是否与a匹配的逻辑条件 查询。 CKQuery类仅支持谓词的子集 完整的NSPredicate课程提供的行为。
您的NSPredicate
构建似乎没有错,因为它可能适用于NSArray
自定义对象。