核心数据和多对多

Core Data & Many-to-Many

我有一个 iOS 应用程序可以很好地处理两个核心数据实体:员工和部门。 我有一个 UITableViewController,它是一个 NSFetchedResultsControllerDelegate,显示员工和他们的数据,另一个显示部门和他们的数据。

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

在标准 SQL 数据库中,我将有一个交叉引用 table,其中包含 DepartmentID 和 EmployeeID 的列 link。但这似乎不适合 Core Data。

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

您可以通过执行类似于此代码段的操作来使用 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),那么它们不会 "match"。也就是说,既然是一个集合,如果你知道 Bob 就是 Bob(比如,每次你看到 Bob,都是同一个 Bob object/reference),那么你可以一遍又一遍地添加他,集合会自动保护你来自骗子。