Swift - 关系

时间:2017-09-22 17:10:33

标签: ios swift core-data nsmanagedobjectcontext

我是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

0 个答案:

没有答案