iOS CoreData - восстановить отношения - PullRequest
0 голосов
/ 24 марта 2012

Мне интересно, возможно ли "перестроить" отношения в Core Data.

По сути, я запутался при создании своих сущностей, получая данные с сервера SQL, я заполнял свои сущности в виде таблиц (одна таблицана одну таблицу) и теперь кажется, что отношения не работают.

Давайте рассмотрим пример:

Я настроил свою модель с двумя объектами (отдел и сотрудник), сотношение «один ко многим» myRelationWithDepartment (один сотрудник много сотрудников) и соответственно сгенерированные подклассы управляемого объекта.

Я получил сотрудников отдела таблиц и таблиц с моего сервера SQL и вставил всех сотрудников в сотрудника моего объектаи только тогда (потому что мне нужно найти первых сотрудников) все отделы в моем отделе сущностей, используя базовые данные, сохраняя контекст и т. д. Все в порядке, просто отношения не работают.

Теперь я могусделать запрос на выборку из отдела или сотрудника, он работает нормально.Но если я получаю сотрудника и делаю это:

[[anEmployee myRelationWithDepartment] departmentName];

он возвращает ноль, без предупреждений компиляции или ошибок, просто кажется, что ни один отдел не связан с сотрудником.

Так что я предполагаючто отношения не работают.

Я включил в модель идентификаторы, которые были у меня в таблицах SQL, поэтому я могу связать их вручную (но на самом деле у меня несколько сущностей).


Я просмотрел руководство по Core-Data и обнаружил следующее:

[aDepartment.employees addObject: newEmployee];// не делайте этого!

, тогда уведомления об изменении KVO не отправляются и обратное соотношение не обновляется правильно.

Напомним, что точка просто вызывает метод доступа, поэтому по тем же причинам:

[[сотрудники отдела] addObject: newEmployee];// также не делайте этого!

Вот почему я предполагаю, что отношения имеют плохую форму.Есть ли способ восстановить отношения впоследствии (поскольку я делю некоторые идентификаторы в модели между сущностями)?

1 Ответ

0 голосов
/ 25 марта 2012

Я копаю больше в документации Apple, и отношения должны быть заполнены вручную:

Для создания отношения «ссылка»:

anEmployee.myRelationWithDepartment = departmentObject;

В качестве альтернативы вы можете использовать:

[department addEmployeeObject:anEmployee];

Тогда при извлечении объектов вы можете получить доступ к свойствам связанных объектов.

Проблема в том, что Core-Data «продается», поскольку все происходит само по себе, и на самом деле все гораздо глубже, чем кажется на первый взгляд.

...