I’m writing code that walks through an NSPredicate and generates an alternate 
form of query from it (similar to what CoreData and Realm do.)

I’m seeing some very weird undocumented behavior when format strings are 
compiled into NSPredicates, if the format string includes a key-path with a 
property named “first” or “last”. The resulting predicate contains an 
NSExpression of an undocumented type.

- For example, “name.middle == ‘Bob’” compiles to what you’d expect; the LHS of 
the ‘equals’ predicate is an expression of NSKeyPathExpressionType, with 
key-path “name.middle”.
- But “name.first == ‘Bob’” results in an LHS that’s of 
NSFunctionExpressionType, with a function selector “valueForKeyPath:”, and even 
weirder, the expression’s argument is an expression with the undocumented 
expressionType 11. I don’t know what that is supposed to mean, except that its 
-description is “FIRST” (all caps).

NSComparisonPredicate
        predicateOperatorType = NSEqualToPredicateOperatorType
        leftExpression =
                NSKeyPathExpression
                        expressionType = NSFunctionExpressionType
                        function = “valueForKeyPath:”
                        operand =
                                NSKeyPathExpression
                                        expressionType = NSKeyPathExpressionType
                                        keyPath = “name”
                                        operand = SELF
                        arguments = [
                                NSSymbolicExpression
                                        expressionType = 11 (?????)
                        ]
        rightExpression =
                NSExpression
                        expressionType = NSConstantValueExpressionType
                        constantValue = @“Bob” 

Is there something magic about the property name “first”? The only related 
thing I’ve seen is that in predicate syntax arrays can be indexed with 
“[FIRST]” or “[LAST]”, but that’s in an array subscript not a keypath…

—Jens
_______________________________________________

Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to