I have tried to use fetched properties a couple of times, and although it seems to be the right approach, it never works.
In my latest attempt I added the fetched-property to my entity, selected the other entity in the model as the 'destination', and set the predicate to a condition that I know is valid.
Problem 1: When the NSManagedObject-class for the entity is generated it does not include anything for the fetched-property. After some searching I added the declaration for it in the .h file and the @dynamic statement for it in the .m file (yes, I know it's an NSArray * type).
Problem 2: Even after that, when I access this property in code I get an exception being thrown that states something to the effect that the fetch-request does not have an entity. I am assuming that the 'entity' would be the one specified as the 'destination' and it is, in fact, there.
So, I'd like someone to provide a concrete working example (iOS platform) where a fetched-property is defined in the model, declared in a NSManagedObject-derived class, and actually used from code.
At this point I am giving up on this time-waster and simply implementing the fetch-request code myself.
Adding to @Peter's answer. Here's how I got it working in Swift 2.0 and Xcode 7:
And then, to read the fetched property:
Have you taken a look at this previous question: Xcode 4 Core Data: How to use fetched property created in Data Model editor
Read through the accepted answer and all of the comments. It sounds like they have it sorted out.
Here's my relevant bits of code (including bits you've already mentioned):
My example has a 'Card' object that has a 1->many relationship with a 'Stats' object. Each 'Stats' object has an 'outcome' that can be 1-4. My fetched property is a simple one to give my 'Card' object an array of 'Stats' objects that are of 'outcome'=1 only.
I wanted to use the fetched property so that I could easily get hold of 'Card' objects that had more than a certain number and kind of 'Stats' objects.
So, in the 'Card' object I put the Fetched Property 'statsOfTypeOne', with Destination set to 'Stats'.
In the predicate for this fetched property I put
'SELF' is the 'stats' record, and $FETCH_SOURCE magically becomes the 'Card' object when executed.
As you did, I put the following in the .h and .m files for the 'Card' object:
Then in my code I used:
to get at the array (although cardInstance.statsOfTypeOne should be fine). Without the refresh object it wasn't updating the Fetched property (as per the manual).
I think that's everything that I did to make it work. Let me know if it works for you.
Peter