核心数据:父实体和关系

时间:2014-09-14 03:41:41

标签: ios xcode core-data

我正在开发一个数据收集应用程序,但我无法理解这些概念是如何连接的?这是我的计划: 网站< ----->>站< ------->>观察活动

网站有一个属性,一个网站的名称,并且可以包含多个工作站。每个站将随着时间的推移有多个观测值。我将这些设置为左侧的事件作为父事件,并创建了一对多的关系,如图所示,因为每个观察事件都需要用站点和站点标记。

我假设父实体是创建它的最佳方式,或者这是一种关系会做什么?我希望用户可以提前设置站点/站点数据,然后在制作时填写观察数据。

简而言之,我无法理解核心数据中的关系,以及父实体是多余的。核心数据文档对我来说并不清楚。任何帮助都会非常感激!!

2 个答案:

答案 0 :(得分:1)

从本质上讲,当您生成实体类时,您将会看到的是,除了每个实体的属性之外,您还会为" to-many&#具有NSSet。 34;关系。您可以参考任何"记录"通过集合中的值在to-Many关系中。

起初看起来很复杂,但它总是有意义的。所以,如果你想看看电台,你可能会有一个"电台"设置包括该站点的每个站实体的托管对象列表。每个工作站将包含一个集合,其中包含每个相关观察的管理对象。

因此,一旦您拥有了Site实体,就可以使用以下内容查看该站点的所有站点:

Site *site = (Site *) managedObjectForSite;
for (NSManagedObject *station in site.stations)
{
     Station *stat = (Station *) station;
     (do what you need to with the station record)
}

你"链接"具有站点的站点通过将成员添加到给定站点记录的站点集合,其中每个成员是站点的管理对象。你被解除了阅读和#34;站记录 - 一旦你拥有了加载了站点的集合的成员,每个成员实际上都是相关站点的管理对象。

当灯亮起时,它会立刻变得清澈透明。你必须完成它,然后你才会知道那里发生了什么......

请同时查看此内容,因为它可能会有所帮助:One-to-Many Relationship: CoreData

答案 1 :(得分:0)

在Core Data中,关系在经典关系数据库设置中具有与外键类似的功能。

在数据库中,您将使用外键“连接”Site,Station和Event实体:

Site .id    = Station .siteID
Station .id = Event   .stationID

在核心数据中,这不是必需的。这两个实体都不需要额外的ID属性,而只需定义一对多关系。

Site <--->> Station <---->> Event

优势:您可以从站点或站点中的所有站点访问站点,使用透明且清晰易读的点符号,就像您对对象图表所期望的那样。您甚至可以通过事件对象等方便地获取网站。

Site  *aStationsSite    = station.site;
NSSet *aSitesStations   = site.stations;
NSSet *aStationsEvents  = station.events;
NSSet *sisterStations   = station.site.stations;
Site  *siteFromEvent    = event.station.site;