CoreData Отношение между сущностями и атрибутами - PullRequest
5 голосов
/ 29 марта 2012

У меня возникли небольшие проблемы с пониманием отношений CoreData, я уверен, какой тип отношений я должен использовать между двумя объектами или моя логика верна.

1) Сущность «Персона» - такие атрибуты, как имя, телефон, адрес, страна и т. Д. *

2) «CountryList» - такие атрибуты, как countryName, countryLat, countryLong и т. Д.

При первом запуске приложения сущность CountryList предварительно заполняется, чтобы включить все страны мира и соответствующие данные.

Где я застрял, мне нужны отношения между этими двумя сущностями?

Я разрешаю пользователю выбирать страну из данных сущности CountryList и желаю сохранить там выборку в атрибуте страны для сущности Person.

Должен ли я просто взять CountryName из CountryList в качестве строки и сохранить его в стране из Person? или я могу установить отношения между ними?

Я знаю, что пользователь может принадлежать только к одной стране, но в стране может быть много пользователей, так это отношения один ко многим? Или это много ко многим, потому что множество пользователей могут принадлежать стране, но в стране может быть множество пользователей? Confused!

Может ли кто-нибудь, пожалуйста, просветить меня об этом и указать мне в правильном направлении, что я должен делать в xcode.

Большое спасибо заранее Matt

РЕДАКТИРОВАТЬ: Это правильно?

Я внес изменения в имена сущностей и т. Д. И думаю, что теперь у меня правильно установлены отношения.

Xcode Screenshot

РЕДАКТИРОВАТЬ 2: Удален атрибут страны и переименованы отношения

Xcode Screenshot

Ответы [ 3 ]

5 голосов
/ 29 марта 2012

Во-первых, ваша сущность "CountryList" должна называться "Страна", поскольку она представляет только одну страну. Тот факт, что у вас есть многие из этих стран, не имеет ничего общего с его названием.

После этого кажется вполне естественным использовать отношения, у одного «Человека» есть одна «Страна», но в одной стране может быть много людей. Следовательно, отношения один ко многим. Использование отношений упростит многие операции, которые вы, возможно, захотите выполнить (например, получить доступ ко всей информации о стране одного человека или получить список всех лиц, находящихся в одной конкретной стране).

О, и это может помочь вам лучше понять отношения: в CoreData нет отношений «многие ко многим» как таковых. Вы всегда определяете отношение от источника к цели. Поэтому, если вы определите отношение от страны к человеку, это будет отношение один ко многим. Одна страна, много людей. Затем вы можете определить отношения между человеком и страной, которые будут отношениями «один к одному». Один человек, одна страна. Если бы вы определили это как отношения «один ко многим», вы бы в конечном итоге получили отношения «многие ко многим» (потому что у человека может быть много стран, а в одной стране может быть много людей). Это не так сложно, как кажется.

Теперь, после того, как вы определили свои два отношения, вы можете установить их как «Обратные отношения». Сделайте это для одного из отношений, другое будет установлено автоматически. После того, как вы это сделаете, CoreData, например, обновит страну человека, когда вы добавите человека в список страны.

См. https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html для получения дополнительной информации.

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

Вы используете базовые данные, поэтому вы должны определить отношения между Person и Country, если вы хотите получить страну человека из базы данных.

И в этих отношениях вы можете принять отношения один на один. Поскольку один человек будет принадлежать только одной стране. Конечно, в стране будет много людей, но если вы не хотите показать всех людей, имеющих отношение к конкретной стране, вам не нужны отношения один ко многим ..

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

http://www.theappcodeblog.com/2011/09/29/iphone-app-development-tutorial-core-data-part-2-one-to-many-relationship/

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

CountryList должно быть просто Country

Затем вы устанавливаете отношение «многие к одному» между Person.county и Country

...