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

时间:2018-03-04 17:39:29

标签: ios core-data

很抱歉,如果这个问题可能是个问题,但我找不到任何与我的具体问题相关的问题。因此,我从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个发言者。问题是我如何在数据库中编写它,因为我在会议中填充了所有实体。我是否应该已经在数据库中保存了所有流,位置,办公室,城市和扬声器,然后只是从服务器添加会议?如果是这样,我怎么能指出一个会议应该从另一个实体继承多个流/发言者。

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

1 个答案:

答案 0 :(得分:0)

使用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()

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