在核心数据中写入多对多关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在核心数据中写入多对多关系相关的知识,希望对你有一定的参考价值。

对不起,如果这个问题可能是一个公告,但我找不到与我的具体问题相关的任何内容。因此,我从oline数据库获取数据,并希望将数据保存在核心数据中,以防用户不进行互联网连接。我得到了一份会议清单,我看起来像这样

"city": city_name, 
"location": some_meeting_room, 
"streams": multiple_streams, 
"videoUrl": no url, 
"contentUrl": no url, 
"description": very good event, 
"speakers": multiple_speakers, 
"title": title, 
"endTime": 1519290000000, 
"guid": aaaa551f-67c9-480a-9e39-c5c680a53039, 
"office": office_name, 
"startTime": 1519286400000

我已经为会议,地点,演讲者,办公室,城市和演讲者创建了实体。

我的问题与coredata中的Manu-to-Many关系有关。例如,一次会议可以归为3个流,并有2个发言者。问题是我如何在数据库中编写它,因为我在会议中填充了所有实体。我是否应该已经在数据库中保存了所有流,位置,办公室,城市和扬声器,然后只是从服务器添加会议?如果是这样,我怎么能指出它应该从另一个实体继承多个流/扬声器的会议。

很抱歉很长的帖子,我试着说清楚。

答案

使用CoreData时,您在获取,插入,更新和删除对象时使用托管对象上下文对象而不是对数据库,因此当您在上下文中创建(插入)新对象时,它与您执行此操作的顺序无关。 CoreData将负责处理并确保对象在数据库中正确存储而不会破坏任何约束。

因此,如果您拥有托管对象上下文moc,则可以使用以下(相当不完整的eaxample)

let meeting = Meeting(context: moc)
//... set some meeting properties
let speaker1 = Speaker(context: moc)
let speaker2 = Speaker(context: moc)
meeting.addToSpeakers(speaker1)
meeting.addToSpeakers(speaker2)

首先创建会议在这里没有任何区别,直到您保存上下文才会将对象插入到数据库中。

moc.save()

当然,您需要首先通过尝试获取每个扬声器来检查先前会议中是否存在扬声器。

以上是关于在核心数据中写入多对多关系的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中建立多对多关系? (核心数据)

为核心数据手动创建多对多关系中的中间表

多对多关系核心数据

Swift核心数据多对多关系不保存实体

从多对多关系中获取核心数据

为多对多关系覆盖核心数据设置器方法