2012-03-29 3 views
5

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

1) "Лицо" Entity - атрибуты, такие как имя, тел, адрес, страна, и т.д. ...

2) "CountryList" - атрибуты, такие как COUNTRYNAME, countryLat, countryLong и т.д ..

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

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

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

Я просто беру имя страны из CountryList как строку и храню ее в стране от Лица? или я могу установить отношения между ними?

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

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

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

EDIT: Правильно ли это?

Я внес изменения в имена объектов и т. Д. И думаю, что у меня теперь правильная взаимосвязь.

Xcode Screenshot

EDIT 2: Удален атрибут страны и переименованы отношения

Xcode Screenshot

+0

Если вы не уверены, как реализовать отношения, дайте мне знать .. Я в настоящее время работает только на основных данных и сделал все эти вещи .. Так всегда рад помочь .. :-)) –

+0

Выглядит хорошо сейчас, но, как я уже сказал, переименуйте отношения. Кроме того, вам больше не понадобится атрибут «страна» в «Лице» – JiaYow

ответ

5

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

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

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

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

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

+0

. Пожалуйста, обратите внимание на мой ответ и любезно запросите, если мое предложение неверно. –

+0

@JiaYow Большое спасибо, я думаю, что это - то, где я получаю немного запутанное мышление CoreData как база данных и предполагая, что Сущности подобны таблицам. Который я знаю, не тот случай, но трудно найти, что трудно думать иначе. Таким образом, в xcode я выбираю Person Person и создаю отношения countryRel, а затем выбираю Country entity и создаю personRel и устанавливаю Inverse. Затем выберите personRel отношения под сущностью Country и выберите To-Many Relationship? Я думаю, это кажется правильным. –

+0

Yup. Но пропустите части «Rel». Назовите отношения «страна» и «люди» (у вас будет много людей, поэтому множественное число) соответственно. Гораздо удобнее использовать – JiaYow

0

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

Затем вы установите «многие к одному» отношениям между Person.county и Страной

0

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

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

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

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

+0

Пожалуйста, сообщите мне, если я ошибаюсь .. –

+1

Обратите внимание, что это верно для отношения Person-> Country, а не для Country-> Person (если он этого тоже хочет) – JiaYow

+0

@JiaYow: Да, это то, что я пытался сказать, но Я объяснил это небольшим жестким языком .. Спасибо, приятель .. :-)) –

Смежные вопросы