• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag
 

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Many-to-many coredata fetch request (Probably Solved)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Many-to-many coredata fetch request (Probably Solved)


  • Subject: Re: Many-to-many coredata fetch request (Probably Solved)
  • From: email@hidden
  • Date: Wed, 31 May 2006 11:25:09 -0700

After a bit of searching, its apparent that if an NSManagedObject has a to-many or other attribute that is generated at runtime (not managed by the MOC)
then the fetch request will ignore it. This probably for performance, but I think an option to turn this off/on would be nice.


In any case, here is the workaround: after getting the fetch for the specific entity you want, then filter it in memory like so:

NSPredicate *predicate = [self predcateThatEvaluatesNonPersistedAttributes];
NSFetchRequst *request = [[[NSFetchRequest alloc] init] autorelease];


	[request setEntity:targetEntity];

NSArray *resultsOfFetch = [[self managedObjectContext] executeFetchRequest: request error:&fetchError];

if (resultsOfFetch)
{
return [resultsOfFetch filteredArrayUsingPredicate: predicate];
}



 email@hidden wrote:
Andrew Cooper wrote:

I am by no means a Predicates expert, but according to
http://developer.apple.com/documentation/Cocoa/Conceptual/ Predicates/Articles/pSyntax.html#//apple_ref/doc/uid/ TP40001795-215891
of the http://developer.apple.com/documentation/Cocoa/Conceptual/ Predicates/ Guide, shouldn't your left and right-hand sides be switched?


[quote]
IN

Equivalent to an SQL IN operation, the left-hand side must appear in the collection specified by the right-hand side. For example, name IN { 'Ben', 'Melissa', 'Matthew' }.
[/quote]


By that definition, you have your target names trying to be in people.name instead of the other way around.

Hi Andew, thanks for your suggestion.

The reason they were switched was because I'm getting this error:
NSRunLoop ignoring exception 'The left hand side for an ALL or ANY operator must be either an NSArray or an NSSet.' that raised during posting of delayed perform with target 4b89760 and selector 'invokeWithTarget


This is because I am comparing items in a to-many in an array, using ANY key word.
So if the keypath evaluates to {jon,tom,bobo} and the given array returns {chris,bobo} I want that to evaluate as a positive match.


It seems that NSPredicate has the limitation of only being able to compare to-many to a single value, not to-many IN to-many or ANY to- many IN to-many....

Andre

Hope that helps.
- Andrew Cooper -

On May 31, 2006, at 2:14 AM, email@hidden wrote:

Hi all,

I'm having a bit of a trouble getting fetch to execute right.
I have an entity that contains a to-many relation. In the objects of that relation are string values I want to search for.


So its like this:

Entity A ->> EntityWithStrings (e.g names)

So I want to do a search that takes an array of names (multiple selection) and search for objects that contain any of those names.

Someting like "ANY object.tomany.name IN myArrayOfNames"



Here is how I'm constructing my predicate:

NSArray *allNames = [[self selectedObjects] valueForKey:@"name"];

NSExpression *targetKeyPath = [NSExpression expressionForKeyPath:@"people.name"];
NSExpression *targetNames = [NSExpression expressionForConstantValue: allNames];

NSPredicate *weakPredicate = [NSComparisonPredicate predicateWithLeftExpression: targetNames
rightExpression: targetKeyPath
modifier: NSAnyPredicateModifier
type: NSInPredicateOperatorType
options:0];




Andre
email@hidden



_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
40gmail.com


This email sent to email@hidden

_______________________________________________ Do not post admin requests to the list. They will be ignored. Cocoa-dev mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: This email sent to email@hidden

_______________________________________________ Do not post admin requests to the list. They will be ignored. Cocoa-dev mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: This email sent to email@hidden

_______________________________________________ Do not post admin requests to the list. They will be ignored. Cocoa-dev mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: This email sent to email@hidden
References: 
 >Many-to-many coredata fetch request (From: email@hidden)
 >Re: Many-to-many coredata fetch request (From: Andrew Cooper <email@hidden>)
 >Re: Many-to-many coredata fetch request (From: email@hidden)

  • Prev by Date: Re: [OBJC Newbie] - MD5 Digest
  • Next by Date: Re: Separators in NSMenu via bindings
  • Previous by thread: Re: Many-to-many coredata fetch request
  • Next by thread: NSTableView selection
  • Index(es):
    • Date
    • Thread