views:

63

answers:

1

I have an AUDIO class. This audio has a SOUND_A subclass and a SOUND_B subclass. This is all done correctly and is working fine.

I have another model, lets call it PLAYLIST_JOIN, and this can contain (in the real world) SOUND_A's and SOUND_B's, so we give it a relationship of AUDIO and PLAYLIST.

This all works in the app.

The problem I am having now is querying the PLAYLIST_JOIN table with an NSPredicate. What I want to do is find an exact PLAYLIST_JOIN item by giving it 2 keys in the predicate

sound_a._sound_a_id = %@ && playlist.playlist_id = %@

and

sound_b.sound_b_id = %@ && playlist.playlist_id = %@

The main problem is that because the table does not store sound_a and sound_b, but stored audio, I cannot use this syntax. I do not have the option of reorganizing the sound_a and sound_b to use the same _id attribute name, so how do I do this?

Can I pass a method to the predicate? something like this:

[audio getID] = %@ && playlist_id = %@

+1  A: 

It gets a little complicated but you need to add a third condition to the predicate:

(entity.name = sound_a && _sound_a_id = %@ && playlist.playlist_id = %@) && (entity.name = sound_b && sound_b_id = %@ && playlist.playlist_id = %@)

This is assuming you are querying against the audio abstract and telling it to return subclasses. Because the condition is checked left to right, if the first condition fails it will move on and not throw errors because _sound_a_id does not exist.

The first condition is referencing the NSEntityDescription that is a part of the NSManagedObject and its name attribute is just a string.

Marcus S. Zarra
Thanks Marcus. I looked in your book for the answer first btw :) Shouldn't it be an || in the middle of the 2?
coneybeare
Marcus S. Zarra