CoreData实体和属性之间的关系

时间:2012-03-29 13:30:00

标签: iphone objective-c ios xcode core-data

我在掌握CoreData关系方面遇到了一些麻烦,我注意到我应该在我的2个实体之间使用哪种关系类型,或者我的逻辑是否正确。

1)“人”实体 - 姓名,电话,地址,国家等属性......

2)“CountryList” - countryName,countryLat,countryLong等属性。

CountryList实体在首次运行时预先填充,以包含世界上所有国家/地区及其尊重的数据。

我被困在哪里?我需要这两个实体之间的关系吗?

我将允许用户从CountryList实体数据中选择一个国家,并希望在Person实体的country属性中存储选择。

我是否只将CountryList中的countryName作为字符串并将其存储在Person的国家/地区?或者我可以在他们之间建立关系吗?

我知道一个用户只能属于一个国家,但一个国家可以有很多用户,所以这是一对多关系吗?或者它是多对多,因为许多用户可以属于一个国家,但一个国家可以拥有大量用户?困惑!

有人可以请大家指教我,并指出我在xcode中应该做的正确方向。

非常感谢提前 马特

编辑:这是正确的吗?

我已对实体名称等进行了更改,并认为我现在已正确设置关系。

Xcode Screenshot

编辑2:删除了国家/地区属性并重命名了关系

Xcode Screenshot

3 个答案:

答案 0 :(得分:5)

首先,您的“CountryList”实体应称为“国家/地区”,因为它只代表一个国家/地区。您拥有许多这些国家的事实与其名称无关。

在那之后,使用关系似乎很自然,一个“人”有一个“国家”,但一个国家可以有很多人。因此,一对多的关系。使用关系将简化您可能想要执行的许多操作(即访问一个人的所有国家/地区信息,或获取所有人在一个特定国家/地区的列表)。

哦,这可能会帮助您更好地理解关系:CoreData本身没有“多对多”关系。您始终定义从源到目标的关系。因此,如果您定义从Country到Person的关系,这将是一对多的关系。一个国家,很多人。然后,您可以定义从人到国家的关系,这将是一对一的关系。一个人,一个国家。如果您将此定义为一对多关系,那么您最终会得到事实上的多对多关系(因为人们可以拥有多个国家,一个国家可以拥有多个人)。它并不像看起来那么复杂。

现在,在您定义了两个关系之后,您可以将它们设置为彼此“反向关系”。对其中一个关系执行此操作,另一个将自动设置。执行此操作后,CoreData将在您将此人添加到国家/地区列表时更新人员所在的国家/地区。

有关详细信息,请参阅https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html

答案 1 :(得分:0)

CountryList应为Country

然后在Person.county和Country

之间设置“多对一”关系

答案 2 :(得分:0)

您正在使用核心数据,因此如果您想从数据库中获取人员的国家/地区,则必须定义PersonCountry之间的关系。

在这种关系中你可以采取一对一的关系。因为一个人只属于一个国家。当然,一个国家会有很多人,但除非你想要展示与特定国家有关的所有人,否则你不需要一对多的关系..

如果你想实现一对多的关系this教程链接可能对你理解一对多关系有帮助..

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