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 (Cocoa-dev@lists.apple.com)

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 arch...@mail-archive.com

Reply via email to