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]