建立两个实体之间的关系?

问题描述:

我有一个tableview中的事件的名称,我想救反应(是= 1,无= 2,从动作控制器)与事件名一起的用户。因此,我创建2个实体建立两个实体之间的关系?

EventSchedule (eventName: String, eventTime: Transformable) 

one to one关系eventSchedule

EventDec (eventStatus: Integer16)

one to one反比关系eventDec

我做了以下

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){ 
      let alert = UIAlertController(title: "title", message: "msg", preferredStyle: .alert) 
      alert.addAction(UIAlertAction(title: "yes", style: .default) { _ in 

let eventDesc = NSEntityDescription.insertNewObject(forEntityName: "EventDec", into: context) 
let eventSch = NSEntityDescription.insertNewObject(forEntityName: "EventSchedule", into: context) 

//How do I add relationship property to the above objects so that I can store event name along with response in database? 

      eventDesc.setValue(1, forKey: "eventStatus") 
      do 
      { 
       try context.save() 
       print("Record Saved Successfully") 
       print(eventDesc) 
      } 
      catch{} 
     }) 
     alert.addAction(UIAlertAction(title: "no", style: .default) { _ in 

let eventDesc = NSEntityDescription.insertNewObject(forEntityName: "EventDec", into: context) 
    let eventSch = NSEntityDescription.insertNewObject(forEntityName: "EventSchedule", into: context) 

//How do I add relationship property to the above objects so that I can store event name along with response in database? 

      eventDesc.setValue(2, forKey: "eventStatus") 
      do 
      { 
       try context.save() 
       print("Record Saved Successfully") 
       print(eventDesc) 
      } 
      catch{} 
     }) 

     present(alert, animated: true, completion: nil) 
} 
+0

您可以设置与KVC的关系相同因为您正在插入数据'eventDesc.setValue(2,forKey:“eventStatus”)'。你必须在那里使用关系名称。 –

您可以用下面的(基于聊天讨论)更换您didSelectRowAt

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){ 

    let eventDesc = NSEntityDescription.insertNewObject(forEntityName: "EventDec", into: context) as! EventDec 
    var eventSch: EventSchedule? 
    do { 
     let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "EventSchedule") 
     fetchRequest.fetchLimit = 1 
     fetchRequest.predicate = NSPredicate(format: "eventName == %@", self.eventTitle) 
     var objects: [EventSchedule] 

     try objects = context.fetch(fetchRequest) as! [EventSchedule] 
     eventSch = objects[0] as EventSchedule 
     print(eventSch) 

    } catch { 
     print("whatever") 
    } 

    eventSch.eventDec = eventDesc 
    eventDesc.eventSchedule = eventSch 

    let alert = UIAlertController(title: "title", message: "msg", preferredStyle: .alert) 

    alert.addAction(UIAlertAction(title: "yes", style: .default) { _ in 
     eventDesc.setValue(1, forKey: "eventStatus") 

     do { 
      try context.save() 
     } catch{ 
      print("Try again") 
     } 
    }) 

    alert.addAction(UIAlertAction(title: "no", style: .default) { _ in 
     eventDesc.setValue(2, forKey: "eventStatus") 

     do { 
      try context.save() 
     } catch { 
      print("Try again") 
     } 
    }) 
    present(alert, animated: true, completion: nil) 
} 

// ... Your code... 

let eventDesc = NSEntityDescription.insertNewObject(forEntityName: "EventDec", into: context) 

// insert eventDesc into coredata 
eventDesc.setValue(2, forKey: "eventStatus") 

// relation & inverse relation 
eventSch.eventDec = eventDesc 
eventDesc.eventSchedule = eventSch 

// rest of your code, as is... 

让我知道,如何去。


编辑

你可以得到eventSch的物体,像以下:

do { 
    let fetchRequest = NSFetchRequest(entityName: "EventSchedule") 
    fetchRequest.fetchLimit = 1 
    fetchRequest.predicate = NSPredicate(format: "name == %@", your_event_name) 
    var objects: [EventSchedule] 

    // objects[0] is your object here. 
    try objects = context.executeFetchRequest(fetchRequest) as! [EventSchedule] 

} catch { 
    print("whatever") 
} 
+0

欣赏你的回应,我在另一个viewController中填充eventSch值。那么,我需要创建“relation_key”和“inverse_relation_key”,类型为“整型”,因为它说“型‘NSManagedObject’具有执行你的代码? – Coder221

+0

如果您在另一个视图控制器创建后没有成员‘relation_key’的价值属性,那么你需要获取特定'eventSch'对象上面的代码工作,你正在创建一个新的'eventSch'对象。这就是为什么它不工作。 – viral

+0

确定。我再拿它和尝试。怎么样的关系。做我需要创建任何特殊的属性建立关系? – Coder221