Iphone 实体和属性之间的CoreData关系

Iphone 实体和属性之间的CoreData关系,iphone,objective-c,ios,xcode,core-data,Iphone,Objective C,Ios,Xcode,Core Data,我在掌握CoreData关系方面有点困难,我确定我应该在我的两个实体之间使用哪种关系类型,或者我的逻辑是否正确 1) “人员”实体-名称、电话、地址、国家等属性 2) “CountryList”-属性,如countryName、countryLat、countryLong等 CountryList实体在应用程序首次运行时预先填充,以包含世界上所有国家及其受尊重的数据 我陷入困境的地方是我需要这两个实体之间的关系吗 我将允许用户从CountryList实体数据中选择一个国家,并希望将选择存储在Pe

我在掌握CoreData关系方面有点困难,我确定我应该在我的两个实体之间使用哪种关系类型,或者我的逻辑是否正确

1) “人员”实体-名称、电话、地址、国家等属性

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

CountryList实体在应用程序首次运行时预先填充,以包含世界上所有国家及其受尊重的数据

我陷入困境的地方是我需要这两个实体之间的关系吗

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

我是否只是将CountryList中的countryName作为字符串存储在Person的country中?或者我可以在他们之间建立关系

我知道一个用户只能属于一个国家,但一个国家可以有很多用户,所以这是一对多关系吗?或者是多对多,因为很多用户可能属于一个国家,但一个国家可能有大量用户?糊涂了

有人能告诉我这一点,并指出我在xcode中应该做什么的正确方向吗

非常感谢 马特

编辑:这正确吗?

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

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

首先,您的“CountryList”实体应称为“Country”,因为它只代表一个国家。事实上,你们有许多这样的国家,这与它的名字无关

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

哦,这可能会帮助您更好地理解关系:CoreData本身没有“多对多”关系。您总是定义从源到目标的关系。所以,如果你定义一个国家与人之间的关系,这将是一对多的关系。一国多人。然后,您可以定义个人与国家之间的关系,这将是一对一的关系。一个人,一个国家。如果您将其定义为一对多关系,您将最终得到事实上的多对多关系(因为一个人可以有多个国家,一个国家可以有多个人)。它不像看上去那么复杂

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


有关更多信息,请参阅。

CountryList
应仅为
Country


然后在Person.Country和Country之间设置“多对一”关系

您使用的是核心数据,因此如果要从数据库中提取人员的国家,必须定义
Person
Country
之间的关系

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

如果您想实现一对多关系教程链接,可能有助于您理解一对多关系


请查看我的答案,如果我的建议有误,请给出提示。@Jiayou非常感谢,我想这就是我对CoreData像数据库一样的想法和假设实体像表一样的想法有点困惑的地方。我知道事实并非如此,但很难发现有其他想法。因此,在xcode中,我选择Person实体并创建关系countryRel,然后选择Country实体并创建personRel并设置它们的倒数。然后在国家实体下选择personRel关系,然后选择To Many relationship?我觉得这似乎是对的。但是跳过“Rel”部分。将这种关系分别称为“国家”和“个人”(你会有很多人,因此是复数)。这样做更直观use@JiaYow再次感谢,很高兴你不仅给出了答案,而且还提出了一些“最佳实践”建议:D请检查我原来帖子中的截图,看看我现在是否正确。我将在我的中更改关系名称project@JiaYow我无法调用关系国家,因为我在Person实体中有一个国家属性。是这样吗?如果你对如何实现人际关系感到困惑,请告诉我。。我目前只研究核心数据,做了所有这些事情。。所以总是乐于助人…-))现在看起来不错,但正如我所说的,重命名关系。另外,你不再需要“Person”中的“country”属性了。注意,这适用于人际关系Person->country,而不是country->Person(如果他也想要的话)@JiaYow:是的,这就是我想说的,但我用了一点强硬的语言解释了。。谢谢你,伙计…-))我确实希望能够为一个特定的国家找到所有的人。那么是一对多吗?是的。。比..您将必须从右侧的模型检查器中选中该选项以查看多个关系。。。