部门的“本月雇员”-已提取财产?怎么样?还是其他?

时间:2018-08-15 20:03:21

标签: swift core-data fetched-property

我有一个包含员工和部门的核心数据数据库。每个员工属于一个部门,每个部门有很多员工。到目前为止,一切都很好。我想为每个部门添加存储他们当前的本月雇员的功能,该功能一次可以指向一个一名雇员。

当我以 relationship 关系进行操作时,我得到警告,该关系应具有 inverse 关系。但是该员工已经属于该部门,因此为每个员工创建一个“部门,我是本月员工”的关系似乎没有任何意义,该关系对于每个部门中除一名员工之外的所有员工都是零。 (不尝试在数据库中跟踪员工的荣誉历史。)

通过阅读高级说明,似乎是 Fetched Property 可以很好地工作的一种用法-'weak, one-way relationship',但是大多数描述如何实现获取的属性(a)使用Objective C代码而不是Swift,和/或(b)变得比看起来似乎需要的复杂性要大得多( )。用例不是要通过谓词获取某些东西,而只是对其进行赋值。我要做的就是:

thisDepartment.employeeOfTheMonth = thisEmployee

然后再

recognitionStr = thatDepartment.employeeOfTheMonth.name

是否有更好的方法来解决此问题?还是“获取的属性”是正确的方法?而且,如果是后者,在Swift中建立employeeOfTheMonth关系的简单直接方法是什么?谢谢!

1 个答案:

答案 0 :(得分:0)

据我所知,Core Data需要相反的方法才能正常工作。因此,一种选择是在Employee上创建逆关系。这很尴尬,但是您永远不会在代码中使用它,所以...还不错吗?

但是我该怎么做(注意:我从未使用过获取的属性):我会在Department上添加一个属性,该属性应该是employeeOfTheMonthID。然后,我将像这样在Department类上写一个属性:

var employeeOfTheMonth: Employee? {
  get {
    guard let id = employeeOfTheMonthID else { return nil }
    let fetchRequest = NSFetchRequest<Employee>(...)
    fetchRequest.predicate = NSPredicate(format: "employeeID == %@", argumentArray: [id])
    fetchRequest.fetchLimit = 1
    return (try? managedObjectContext?.fetch(fetchRequest))?.first
  }
  set {
    employeeOfTheMonthID = newValue?.employeeID
  }
}