建立两个实体之间的关系?
我有一个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)
}
您可以用下面的(基于聊天讨论)更换您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")
}
欣赏你的回应,我在另一个viewController中填充eventSch值。那么,我需要创建“relation_key”和“inverse_relation_key”,类型为“整型”,因为它说“型‘NSManagedObject’具有执行你的代码? – Coder221
如果您在另一个视图控制器创建后没有成员‘relation_key’的价值属性,那么你需要获取特定'eventSch'对象上面的代码工作,你正在创建一个新的'eventSch'对象。这就是为什么它不工作。 – viral
确定。我再拿它和尝试。怎么样的关系。做我需要创建任何特殊的属性建立关系? – Coder221
您可以设置与KVC的关系相同因为您正在插入数据'eventDesc.setValue(2,forKey:“eventStatus”)'。你必须在那里使用关系名称。 –