On Wed, Apr 15, 2009 at 9:05 AM, Alexey Baev <b...@belightsoft.com> wrote: > Hi. > > I have class MyDot. This class has function: > - (BOOL) containsPoint: (NSPoint) pt; > > I have also NSArray, which contains several MyDot objects: > NSArray* dots; > > I want to get new array > NSArray* newDots > which contains MyDot objects and > for these dots containsPoint:(NSPoint)pt = YES. > > How can I do that? > > I would like to write something like that: > > NSPoint checkedPoint = NSMakePoint(100, 100); > > NSPredicate* predicate = [NSPredicate predicateWithFormat: @"containsPoint > %p == YES ", checkedPoint]; //i don't know what to write here > > NSArray* newDots = [dots filteredArrayUsingPredicate: predicate]; > > I would be glad if you helped me. > > -- > Alexey Baev
Alexey, It's quite possible, although it takes a bit more that a simple predicateWithFormat: can do. You'll need to use NSExpression's expressionForFunction:selectorName:arguments: along with a NSComparisonPredicate. Your MyDot class will also need a method that's able to accept a NSValue object (containing a NSPoint) and return an NSNumber. Something like... -(NSNumber *) containsThisPoint: (NSValue *) aPoint; So to filter your array: NSArray *myArrayOfObjects = ... NSPoint tgtPoint = ... NSExpression *functionExp = [NSExpression expressionForFunction:[NSExpression expressionForEvaluatedObject] selectorName:@"containsThisPoint:" arguments:[NSArray arrayWithObject:[NSExpression expressionForConstantValue:[NSValue valueWithPoint:tgtPoint]]]]; NSPredicate *searchPredicate = [NSComparisonPredicate predicateWithLeftExpression:functionExp rightExpression:[NSExpression expressionForConstantValue:[NSNumber numberWithBool:YES]] modifier:NSDirectPredicateModifier type:NSEqualToPredicateOperatorType options:0]; NSArray *newArray = [myArrayOfObjects filteredArrayUsingPredicate:searchPredicate]; -- Jim http://nukethemfromorbit.com _______________________________________________ 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