Извлекать только данные родительского объекта в Core Data, где родительский дочерний объект имеет отношение 1 к M

avatar
Solid Line
8 апреля 2018 в 07:29
434
1
0

enter image description hereenter image description hereУ меня есть 2 объекта. Страна и Регион. Страна к региону имеет отношение 1 ко многим. Если я выбираю страну (по предикату CountryID), он возвращает определенные свойства страны со всеми относительными регионами.

В моем случае мне не нужны данные региона (содержит огромные данные). Как это возможно?

В следующем потоке говорится, что includesSubentities NSFetchRequest может это сделать. Но у меня это не работает!

Основные данные NSFetchRequest также извлекает дочерние объекты Entity

Источник
Joakim Danielson
8 апреля 2018 в 07:38
0

Не могли бы вы показать, как определяются страна и регион? Я не понимаю, является ли страна родительской сущностью региона или они имеют отношения «один ко многим».

Solid Line
8 апреля 2018 в 08:46
0

Отношение страны к региону равно 1 к M. Вы можете вызвать Country — это родительский объект Region.

Solid Line
8 апреля 2018 в 08:52
0

i.stack.imgur.com/n41bf.png i.stack.imgur.com/Dq0dp.png

Joakim Danielson
8 апреля 2018 в 09:22
1

В общем, меня немного смутило название. Разве includeSubEntities не относится только к наследованию?

Joakim Danielson
8 апреля 2018 в 09:32
0

Вы не должны извлекать какие-либо объекты региона, пока у вас нет доступа к каким-либо атрибутам из региона.

Solid Line
8 апреля 2018 в 09:50
0

В Swift его includeSubentities. Я собираюсь получить только страну. Но fetchRequest также извлекает регионы (есть связь)

pbasdf
8 апреля 2018 в 10:20
0

Как говорит @JoakimDanielson, концепция родительских сущностей и подсущностей сродни наследованию классов и сильно отличается от концепции отношений между сущностями. Таким образом, includesSubentities не имеет значения для ваших целей.

Joakim Danielson
8 апреля 2018 в 18:25
0

@SolidLine, изменили ли вы класс Country какими-либо другими свойствами или функциями?

Solid Line
9 апреля 2018 в 19:31
0

Нет, я этого не делал. (Оба являются подклассом NSManagedObject) - Йоаким Даниэльсон

Joakim Danielson
11 апреля 2018 в 15:27
0

Что ж, должно же быть что-то, чтобы срабатывать ошибки, не могли бы вы показать нам свой код при извлечении?

Ответы (1)

avatar
Paulw11
8 апреля 2018 в 10:06
-1

По умолчанию для NSFetchRequest используется true для returnsObjectsAsFaults, поэтому, если вы не изменили это свойство, ваши регионы будут только неполными объектами5,2505058>неполными объектами5,25050585,99305,25050505,2505050<71,9930>

Вы можете дополнительно ограничить извлекаемые данные, указав только интересующие вас свойства с помощью свойства propertiesToFetch.

Вы, как всегда, должны быть осторожны с предварительной оптимизацией; если производительность является проблемой, вы можете посмотреть на нее, но я сомневаюсь, что даже выборка нескольких тысяч Region в качестве ошибок повлияет на производительность.

Solid Line
9 апреля 2018 в 19:34
0

Вы предлагаете получить с fault fire. Но мой вопрос не об этом.

Paulw11
9 апреля 2018 в 19:39
0

Я также сказал, что если вам не нужен regions, не включайте это свойство в propertiesToFetch. Вы хотите, чтобы я расширил этот раздел моего ответа? Дело в том, что пока вы не сошлетесь на свойство одного из связанных регионов, связанные регионы не извлекаются, это просто ошибки.