我是swift的新手,尤其是核心数据,所以如果我的标题错了,请告诉我。
所以我有三个实体:
主页
AgendaEvent
AgendaDate
Home与AgendaEvent(agendaEvents)有一对多的关系。 AgendaEvent与AgendaDate(agendaDates)有一对多的关系。
我有一个包含所有Homes(Home实体)列表的tableview。 通过单击一个主页,用户进入另一个表视图,其中包含所有事件列表(AgendaEvent)
如果我需要添加新活动,一切正常。添加活动时,我还添加日期(AgendaDates)
------saving the event
for date in dates { // dates array is defined before
if agendaEventToEdit == nil {
dateToAdd = AgendaDate(context:context)
} else {
------------
当用户从tableView中选择一个事件时,我使用segue传递agendaEventToEdit。
这是我的问题: 如果我需要修改一个事件,我可以很容易地修改事件本身(AgendaEvent),如下所示:
if agendaEventToEdit == nil {
agendaEvent = AgendaEvent(context:context)
} else {
agendaEvent = agendaEventToEdit
}
在我的Appdelegate中定义了上下文。
但我不知道如何修改日期(AgendaDate)
for date in dates {
if agendaEventToEdit == nil { // here is the case where user is adding new event and not modifying an existing one.
dateToAdd = AgendaDate(context:context)
} else {
dateToAdd = ??
}
dateToAdd.agendaDates = date
agendaEvent.addToAgendaDates(dateToAdd)
ad.saveContext()
}
基本上我不知道如何传递相关实体的NSManagedObjectContext。 有人可以帮忙吗? 希望问题很明确......如果没有请原谅我......我会尽量让它更清楚。
谢谢!
------------------- UPDATE
在我的事件控制器中,当我选择要修改的事件时,我将事件本身传递给新控制器:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
var eventToPass: AgendaEvent!
eventToPass = myEvents[indexPath.row]
DispatchQueue.main.async { () -> Void in
self.performSegue(withIdentifier: "EventToModify", sender: eventToPass)
}
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "AddEvent" {
if let destination = segue.destination as? EventDetailsVC {
destination.datePassed = selectedDate
}
} else if segue.identifier == "EventToModify" {
if let destination = segue.destination as? EventDetailsVC {
if let event = sender as? AgendaEvent {
destination.agendaEventToEdit = event
}
}
}
}
所以现在在EventDetailsVC中如果agendaEventToEdit为nil,则意味着它要添加的新事件如果不是那么它就是要修改的事件。这是代码:
var agendaEvent: AgendaEvent!
if agendaEventToEdit == nil {
agendaEvent = AgendaEvent(context:context)
} else {
agendaEvent = agendaEventToEdit
}
......
home.addToAgendaEvents(agendaEvent)
ad.saveContext()
我试图对也从EventDetailsVC添加的agendaEvents做同样的事情
var dateToAdd: AgendaDate!
if agendaEventToEdit == nil {
dateToAdd = AgendaDate(context:context)
} else {
dateToAdd = ??
}
dateToAdd.agendaDates = date
agendaEvent.addToAgendaDates(dateToAdd)
ad.saveContext()
}
但我无法在else
中确定dateToAdd