Atze,
The documentation for expressionForFunction: makes a point of stating:
> This expression effectively allows your application to invoke any method on
> any object it can navigate to at runtime. You must consider the security
> implications of this type of evaluation.
Which would indicate that there is some way to make this work. I agree that
speed would be a problem, but I could address that by adding a bounds check
into the expression.
At this point, it's becoming academic, because I know that I can solve the
problem with a bounds check, and post process - but I'd very much like to
understand why this isn't working.
- Ron
On Nov 25, 2009, at 11:34 PM, Alexander Spohr wrote:
> Ron,
>
> I am not sure if that works at all. I never fetched using methods that are
> not part of the database as a qualifier. Your code has to be very slow
> because it would need to fetch all Photos and then call
> distanceFromLatitude:longitude: on each.
>
> Why not qualify directly using a bounding rect?
> latitude > inLatitude - 0.1 && latitude < inLatitude + 0.1 &&
> longitude > inLongitude - 0.1 && longitude < inLongitude + 0.1
> The database can figure that out very fast.
>
> atze
>
>
>
> Am 26.11.2009 um 02:08 schrieb Ron Aldrich:
>
>> Hello All,
>>
>> I'm trying to query a Core Data database which contains geoLocation
>> information for all of the objects of type "Photo" which are within a
>> specified distance of a target point, using the following code.
>>
>> - (NSArray*) photosNearLatitude: (NSNumber*) inLatitude
>> longitude: (NSNumber*) inLongitude
>> {
>> NSExpression *theLHS = [NSExpression expressionForFunction: [NSExpression
>> expressionForEvaluatedObject]
>> selectorName:
>> @"distanceFromLatitude:longitude:"
>> arguments: [NSArray
>> arrayWithObjects:
>> [NSExpression
>> expressionForConstantValue: inLatitude],
>> [NSExpression
>> expressionForConstantValue: inLongitude],
>> nil]];
>>
>> NSExpression* theRHS = [NSExpression expressionForConstantValue: [NSNumber
>> numberWithDouble: 0.1]];
>>
>> NSPredicate* thePredicate = [NSComparisonPredicate
>> predicateWithLeftExpression: theLHS
>>
>> rightExpression: theRHS
>>
>> modifier: NSDirectPredicateModifier
>>
>> type: NSLessThanOrEqualToPredicateOperatorType
>>
>> options: 0];
>>
>> NSManagedObjectContext* theManagedObjectContext = [self
>> managedObjectContext];
>>
>> NSFetchRequest* theFetch = [[[NSFetchRequest alloc] init] autorelease];
>> theFetch.entity = [NSEntityDescription entityForName: @"Photo"
>> inManagedObjectContext:
>> theManagedObjectContext];
>> theFetch.predicate = thePredicate;
>>
>> NSError* theError = NULL;
>> NSArray* theResults = [theManagedObjectContext executeFetchRequest: theFetch
>> error:
>> &theError];
>>
>> return theResults;
>> }
>>
>> The "Photo" class has the following selector.
>>
>> - (NSNumber*) distanceFromLatitude: (NSNumber*) inLatitude
>> longitude: (NSNumber*) inLongitude
>>
>> My problem is that when I call "executeFetchRequest", an exception occurs:
>>
>> 2009-11-25 16:55:20.633 Serendipity[8498:a0f] Unsupported function
>> expression FUNCTION(SELF, "distanceFromLatitude:longitude:" ,
>> 47.71283333333334, -122.225)
>>
>> -[Photo distanceFromLatitude:longitude:] is never called.
>>
>> Can anyone suggest what might be going wrong?
>>
>> - Ron Aldrich
>>
>
_______________________________________________
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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to [email protected]