I am new to Core Data modeling, and I am having a hard time understanding how one-to-many relationships work.
I have a parent entity called Task
, which can have several instances of Comment
entity. I modeled it like this: on Comments
, a relationship to Task
called task
with the Task
entity a destination. On Task
, a relationship called comments
, with Comment
as its destination, and both relationships are each others inverse.
Not defining an inverse results in either warnings or error messages. While modeling this way works, I've noticed that once I create a second comment for a given Task
, the first is replaced (one-to-one relationship).
What would be the correct way to tell the Core Data Model that this relationship allows many comments in one Task
?
Also, since CoreData seems to manage primary keys on its own, how would I create an NSPredicate
to retrieve all comments for a given Task?
Thanks for any suggestions!
First of all you need to set the plural
option in the Task
entity, select it in your .xdatamodeled
and select the relationship
property of Task
entity to comments
you should be able to see this
there is a plural
option be sure to check that out. You must recreate your NSManagedObject
if your using generated classes and also if your using sqlite store you must delete and rebuild so it will not complain about the new schema not being the same with the old one.
To check if you have a one to many relationship your Task
entity should have a property called comments which is a class type of NSSet
not Comments.
If you want to retrieve all comments for a given task you need to iterate the NSSet(comments)
property of that task.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With