Re: Core Data and +[NSExpression expressionForFunction:...]
Re: Core Data and +[NSExpression expressionForFunction:...]
- Subject: Re: Core Data and +[NSExpression expressionForFunction:...]
- From: Alexander Spohr <email@hidden>
- Date: Thu, 26 Nov 2009 08:34:16 +0100
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@hidden)
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:
This email sent to email@hidden