核心数据&许多一对多

时间:2017-11-28 16:55:55

标签: ios swift uitableview core-data nspredicate

我有一个iOS应用程序与两个核心数据实体非常合作:员工和部门。 我有一个UITableViewController,它是一个NSFetchedResultsControllerDelegate,显示Employees和有关它们的数据,另一个显示Departments和有关它们的数据。

但是,我很难理解我如何添加关系。 我理解如何创建关系(使用数据模型的图表视图),但我似乎无法找到有关添加实际关系的任何好信息。

在标准SQL db中,我会有一个交叉引用表,其中包含DepartmentID和EmployeeID的列以链接它们。但这似乎不适合Core Data。

如何在Swift中添加实体关系?

1 个答案:

答案 0 :(得分:1)

您可以通过执行类似于此代码段的操作来使用mutableSetValue:

let employeeBob: Employee = ...
let departmentHR: Department = ...
employeeBob.mutableSetValue(forKey: "departments").add(departmentHR)

之后,您可以通过请求employeeBob.departments访问Bob的部门,或者您可以通过请求departmentHR.employees来获取HR中的员工。 (即该片段也为你处理逆。)

如果您想检查Bob是否已经在HR中,那么您可以检查departmentHR.employees.contains(employeeBob)。但是,要小心,因为它通过引用检查(不是员工ID或其他)...也就是说,如果你创建Bob两次(2个不同的NSManagedObjects具有不同的NSManagedObjectId),那么它们将不会“匹配”。也就是说,因为它是一个集合,如果你知道鲍勃是鲍勃(就像,每次你看到鲍勃,它是相同的鲍勃对象/参考),那么你可以一遍又一遍地添加他,该集将自动保护你免受欺骗