0

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

当我将其作为关系执行时,我收到警告说该关系应该具有反向关系。但是该员工已经属于该部门,并且为每个员工创建“我是本月员工的部门”的关系似乎没有意义,对于每个部门中除了一名员工之外的所有人来说,这将是 nil . (不试图在数据库中跟踪员工的荣誉历史。)

似乎,从阅读高级描述来看,这是一种Fetched Property可以很好地工作的用途——“弱的单向关系”,但大多数文章都描述了如何实现 Fetched Property (a)使用 Objective C 代码而不是 Swift,和/或 (b) 变得看起来应该需要的复杂得多。用例不是用谓词获取某些东西,只是分配它。我想做的就是:

thisDepartment.employeeOfTheMonth = thisEmployee

然后稍后

recognitionStr = thatDepartment.employeeOfTheMonth.name

有没有更好的方法来解决这个问题?还是 Fetched Properties 是正确的方法?而且,如果是后者,employeeOfTheMonth在 Swift 中建立关系的简单、直接的方法是什么?谢谢!

4

1 回答 1

0

据我所知,Core Data 需要反过来才能正常工作。所以一种选择就是在Employee. 这很尴尬,但你永远不会在你的代码中使用它,所以......它不是那么糟糕吗?

但是我会怎么做(警告:我从来没有使用过获取的属性):我会在that'd上添加一个属性。然后我会像这样在类上写一个属性:DepartmentemployeeOfTheMonthIDDepartment

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
  }
}
于 2018-08-15T20:54:12.093 回答