Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 核心数据及;多对多_Ios_Swift_Uitableview_Core Data_Nspredicate - Fatal编程技术网

Ios 核心数据及;多对多

Ios 核心数据及;多对多,ios,swift,uitableview,core-data,nspredicate,Ios,Swift,Uitableview,Core Data,Nspredicate,我有一个iOS应用程序,它可以很好地处理两个核心数据实体:员工和部门。 我有一个UITableViewController,它是一个NSFetchedResultsControllerDelegate,显示员工及其相关数据,另一个显示部门及其相关数据 不过,我很难理解我是如何添加关系的。 我了解如何创建关系(使用数据模型的图形视图),但似乎找不到任何关于添加实际关系的好信息 在标准的SQL db中,我将有一个交叉引用表,其中包含DepartmentID和EmployeeID列以链接它们。但这似乎

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

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

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


如何在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(两个不同的NSManagedObjects和不同的NSManagedObjectId),那么它们就不会“匹配”。这就是说,因为它是一个集合,如果你知道Bob是Bob(比如,每次你看到Bob,它都是同一个Bob对象/引用),那么你可以反复添加他,集合将自动保护你免受欺骗。

为了澄清,如果你有一个“人力资源”部门和一个员工“Bob”,你在问如何将“Bob”添加到“人力资源”部门(与“HR”相反的地方也加上了“Bob”)@ghostatron是的,没错。(当然,还有,如何找到人力资源部的所有员工以及与Bob有关联的所有部门。)我讨厌它,但我找到的唯一方法是:employeeBob.mutableSetValue(forKey:“departments”).add(hrDepartment)。这应该可以为您更新反向。然后,稍后,您可以调用employeeBob.departments以获取包含hrDepartment的集合。@ghostatron在该示例中,我假设forKey值是数据模型中关系的名称。但是add()中的hrDepartment是什么?我会使用部门ID或部门标题还是什么?它如何知道?正确,关键是关系的名称。人力资源部门是一个实际的部门NSManagedObject实例。