On iOS 10.0.1 and Xcode 8.0, I have a CKQuery
that is successfully returning data for a variety of conditions (BEGINSWITH
and equal to certain strings, etc.). Now I'm looking specifically for records with a null value in one of the fields.
According to Apple's Docs, plus How do I set up a NSPredicate to look for objects that have a nil attribute and NSPredicate with boolean is not comparing a boolean to NO, the following syntax should search for nil values:
NSPredicate *searchConditions = [NSPredicate predicateWithFormat:@"joiner = nil "];
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"availableURLs"
predicate:searchConditions];
When I set a breakpoint and examine searchConditions
, it evaluates to joiner == nil
. When I try to use it, the second line throws an exception:
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}}})'
I've tried every combination of =
, ==
, nil
, Nil
, NIL
, and NULL
. All evaluate to joiner == nil
and throw the exception.
In the first linked question, the OP uses predicateWithSubstitutionVariables
to substitute in [NSNull null]
. I tried that as well, but it evaluated again to joiner == nil
and threw the same exception.
The Apple Docs have a section specifcally on searching for nil, and I can't see how their example differs from mine:
predicate = [NSPredicate predicateWithFormat:@"firstName = nil"];
What am I missing here?