我有两个实体:
AgendaEvent
AgendaDate
AgendaEvent与AgendaDate(关系名称)有一对多的关系 是议程日期。
议程日期只有一个属性(日期类型为agendaDates)。
我正在尝试将数组的所有值保存到Agendadate中。
这种保存可能以两种不同的方式发生。
这是我的代码:
var agendaDateToEdit: AgendaDate // this value is passed through a segue if the user clicked to modify an existing one.
var dateToAdd: AgendaDate!
if agendaDateToEdit == nil {
dateToAdd = AgendaDate(context: context)
} else {
dateToAdd = agendaDateToEdit
}
现在我执行for循环以从数组中插入项目:
let agendaEvent: AgendaEvent!
if agendaEventToEdit != nil {
agendaEvent = agendaEventToEdit
} else {
agendaEvent = AgendaEvent(context:context)
}
for date in dates {
dateToAdd.agendaDates = date
agendaEvent.addToAgendaDates(dateToAdd)
ad.saveContext()
}
但是这样我只存储了数组的最后一个值。
我是swift的新手,我真的不明白错误在哪里。 如果有人可以提供帮助,我将非常感激。
谢谢!
答案 0 :(得分:0)
dateToAdd
定义在for
循环的范围之上,因此它在循环的每次迭代中都会存在...
dateToAdd
dateToAdd
的日期设为date
dateToAdd
附加到agendaEvent
dateToAdd
上(这会更改agendaEvent
中已有的副本中的日期)agendaEvent
被告知要添加它刚刚添加的相同的 dateToAdd
,因为该实体已经在agendaDates
核心数据中的多对多关系与NSSet
一起存储,确保每个项目只存在一次。这就是为什么你只有一个AgendaDate
添加到事件中。
由于您持有一个AgendaDate
实例并不断更改其日期,因此您可以看到日期数组中的最后日期。如果您在循环中添加断点,您应该会看到AgendaDate
中的AgendaEvents
轮流获取每个日期。
如果你每次循环创建一个新的dateToAdd
,我预测你会看到更好的结果
for date in dates {
let dateToAdd = AgendaDate(context: context)
dateToAdd.agendaDates = date
agendaEvent.addToAgendaDates(dateToAdd)
ad.saveContext()
}