I’m wondering if it’s possible to "rebuild" relationships in Core Data.
Basically, I messed up when creating my entities, getting data from a SQL server i filled my entities as tables (one table by one table) and it seems now that the relationships are not working.
Let’s take an example :
I’ve set up my model with my two entities (department and employee), with a relation one-to-many "myRelationWithDepartment" (one department many employees), and generated the managed object subclasses accordingly.
I got table department and table employees from my SQL server and inserted all employees in my entity employee and only then (because i have to retrieve first employees) all departments in my entity department, using Core Data, saving context, etc. Everything is fine, just the relationship is not working.
Now I’m able to make a fetch request upon a department or an employee, it works fine. But if I retrieve an employee and do this :
[[anEmployee myRelationWithDepartment] departmentName];
it’s returning nil, no compilation warnings or errors, it just seems that no department is linked to an employee.
So I assume that the relations are not working.
I’ve included in the model the "id"s I had in my SQL tables, so I’m able to link them manually (but i have multiple entities actually).
I’ve gone through the Core-Data guide and found this :
[aDepartment.employees addObject:newEmployee]; // do not do this!
then KVO change notifications are not emitted and the inverse relationship is not updated correctly.
Recall that the dot simply invokes the accessor method, so for the same reasons:
[[aDepartment employees] addObject:newEmployee]; // do not do this, either!
That’s why I assume relationships are badly shaped. Is there a way to rebuild the relationships afterwards (since i share some id’s in the model between entities)?
I dig up more in Apple’s documentation and relationship has to be filled manually :
To create the relationship “link” :
Alternatively, you can use:
Then when fetching objects you can access properties of related entities.
The problem is that Core-Data is “sold” as everything is doing quite by itself and in reality it’s much deeper as it seems at first glance.