2017-02-27 98 views
1

我有一個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」)'。你必須在那裏使用關係名稱。 –

回答

2

您可以用下面的(基於聊天討論)更換您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) 
} 
2
// ... 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

相關問題