Core data 核心数据:具有重复值的多个关系
在我正在开发的里程跟踪应用程序中,这些概念包括“地点”、“腿”和“路线”。从本质上说,路线是连接腿的集合,其中每条腿只是两个地点之间的一条直线(具有相关距离) 我在核心数据中建模路由分支关系时遇到问题,因为一条路由可能包含同一分支两次或两次以上。例如,一个人可以在给定的一天作为一条单一的、连续的旅行路径,从家到办公室、从办公室到工地、从工地到家、从家到办公室、从办公室到家。在这种情况下,“从家到办公室”的分支在路线中包含两次。但是核心数据在NSManagedObject子类中创建了多对多关系,作为NSOrderedSet的实例,这不允许重复的分支 是否有一种方法可以在两个核心数据支持对象(路由和分支)之间创建一种关系,允许同一分支在一条路由中多次出现?我正在用Swift开发我的应用程序,因此任何Swift的具体建议都将不胜感激Core data 核心数据:具有重复值的多个关系,core-data,swift2,Core Data,Swift2,在我正在开发的里程跟踪应用程序中,这些概念包括“地点”、“腿”和“路线”。从本质上说,路线是连接腿的集合,其中每条腿只是两个地点之间的一条直线(具有相关距离) 我在核心数据中建模路由分支关系时遇到问题,因为一条路由可能包含同一分支两次或两次以上。例如,一个人可以在给定的一天作为一条单一的、连续的旅行路径,从家到办公室、从办公室到工地、从工地到家、从家到办公室、从办公室到家。在这种情况下,“从家到办公室”的分支在路线中包含两次。但是核心数据在NSManagedObject子类中创建了多对多关系,作
谢谢。似乎有机会改进模型对象以解决此难题。据我现在所知,您将无法根据当前建模的内容完全定义路线。如何从其组成支腿完全定义路线?由于关系本身是无序的,因此仅通过检查关系无法从腿构建路由,因为您将不知道腿的发生顺序 一个选项是将order属性与leg对象一起存储。起点和终点相同,但顺序不同的腿是不同的对象
第二种可能更简洁的方法是将支腿的顺序存储在route对象中(可能作为支腿ID的列表leg 1->leg 3->leg 4->leg 1->leg 2)。legs关系将使所有支腿都可以构建路由,存储在route对象中的leg order属性将允许您从其支腿构建路由,即使您两次使用相同的支腿。数组是用ID存储腿的顺序的明显方式,但是数组不是支持的核心数据类型,您可能需要考虑将腿ID的顺序存储为可以解析的字符串或可转换属性。请参见似乎有机会改进模型对象以解决此难题。据我现在所知,您将无法根据当前建模的内容完全定义路线。如何从其组成支腿完全定义路线?由于关系本身是无序的,因此仅通过检查关系无法从腿构建路由,因为您将不知道腿的发生顺序 一个选项是将order属性与leg对象一起存储。起点和终点相同,但顺序不同的腿是不同的对象
第二种可能更简洁的方法是将支腿的顺序存储在route对象中(可能作为支腿ID的列表leg 1->leg 3->leg 4->leg 1->leg 2)。legs关系将使所有支腿都可以构建路由,存储在route对象中的leg order属性将允许您从其支腿构建路由,即使您两次使用相同的支腿。数组是用ID存储腿的顺序的明显方式,但是数组不是支持的核心数据类型,您可能需要考虑将腿ID的顺序存储为可以解析的字符串或可转换属性。请参见大概您目前在
支腿
和路线
之间有很多关系。一种解决方案是用一个中间实体(例如RouteLegDetails
)替换这种多对多关系,该中间实体与Leg
和Route
具有一对一的关系。每个Route
可以有许多RouteLegDetails
,同样,每个Leg
也可以有许多RouteLegDetails
。在数据模型编辑器中,它可能如下所示:
这样,如果在同一条路线上有一条支腿
经过两次(或更多次),则每个实例都由不同的RouteLegDetails
表示:这克服了legDetails
有序集中对重复项的限制
这将使您的代码稍微复杂化:当您想将支腿
添加到路线
时,您必须创建一个路由详细信息
对象,并将其添加到路线
上的支腿
关系和支腿
上的路由详细信息
关系中。相反地,要从路线
中删除支腿
,则需要删除相应的RouteLegDetails
对象。推测当前在支腿
和路线
之间存在许多关系。一种解决方案是用一个中间实体(例如RouteLegDetails
)替换这种多对多关系,该中间实体与Leg
和Route
具有一对一的关系。每个Route
可以有许多RouteLegDetails
,同样,每个Leg
也可以有许多RouteLegDetails
。在数据模型编辑器中,它可能如下所示:
这样,如果在同一条路线上有一条支腿
经过两次(或更多次),则每个实例都由不同的RouteLegDetails
表示:这克服了legDetails
有序集中对重复项的限制
这将使您的代码稍微复杂化:当您想要将支腿添加到路线
时,您必须创建路线详细信息
对象,并将其添加到路线
上的支腿
关系和路线详细信息
关系中