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 (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