Re: Question about predicates and list properties.
Re: Question about predicates and list properties.
- Subject: Re: Question about predicates and list properties.
- From: Frédéric Testuz <email@hidden>
- Date: Wed, 26 May 2010 19:03:57 +0200
Le 26 mai 2010 à 16:42, Graham Cox a écrit :
>
> On 27/05/2010, at 12:35 AM, Keary Suska wrote:
>
>> Not enough info: are you using Core Data, or a simple modeled relationship? I assume the issue is about traversing a relationship--otherwise the solution is trivial...
>
>
> No, it's a simple 'to many' property in my own model, not using Core Data. If it's trivial I can't find the solution - I have tried many things hinted at by the predicates guide. I am tired having worked a 14 hour day and counting, so perhaps I just need a rest to see the wood for the trees...
>
> I have a list of objects. Each object has a 'categories' property, which is another 'to many' property, i.e. a list. Each category has a simple 'name' property.
>
> I desire to match a string I enter to any of the categories.name strings in the list using equals, begins with, ends with, contains. I'm setting up the predicate editor in IB, but I can't see any way to use the aggregating predicate syntax anywhere there and when I attempt it I get a runtime error (e.g. no value for key 'ANY categories').
>
> Perhaps it's a limitation of IB that more complex predicate editor row templates are not available?
I had a similar problem (perhaps not exactly the same).
I resolve it by subclassing NSPredicateEditorRowTemplate. Then in IB select the predicate row template and set its class to your subclass.
Here is my code :
@interface RBDAnyPredicateEditorRowTemplate : NSPredicateEditorRowTemplate {
}
@end
@implementation RBDAnyPredicateEditorRowTemplate
- (NSPredicate *)predicateWithSubpredicates:(NSArray *)subpredicates {
/* we only make NSComparisonPredicates */
NSComparisonPredicate *predicate = (NSComparisonPredicate *)[super predicateWithSubpredicates:subpredicates];
/* construct an identical predicate, but set the modifier to NSAnyPredicateModifier flag */
return [NSComparisonPredicate predicateWithLeftExpression:[predicate leftExpression]
rightExpression:[predicate rightExpression]
modifier:NSAnyPredicateModifier
type:[predicate predicateOperatorType]
options:[predicate options]];
}
@end
I did something similar to have a boolean predicate.
Frédéric_______________________________________________
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