【问题标题】:Department's "Employee of the Month" -- Fetched Property? How? Or something else?部门的“月度员工”——拿了财产?如何?或者是其他东西?
【发布时间】:2018-08-15 20:03:20
【问题描述】:

我有一个包含员工和部门的核心数据数据库。每个员工属于一个部门,每个部门都有很多员工。到现在为止还挺好。我想为每个部门添加存储当前本月最佳员工的功能,这将指向一个员工。

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

似乎,从阅读高级描述来看,像这种使用 Fetched Property 可以很好地工作 - 'weak, one-way relationship',但大多数文章都描述了如何实现一个 Fetched Property (a) 使用 Objective C 代码而不是 Swift,和/或 (b) 进入 far 比看起来应该需要的更复杂。用例不是用谓词获取某些东西,只是分配它。我想做的就是:

thisDepartment.employeeOfTheMonth = thisEmployee

后来

recognitionStr = thatDepartment.employeeOfTheMonth.name

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

【问题讨论】:

  • 也许不是您要找的,但“本月最佳员工”并不真正属于部门,而是作为与部门和员工有关系的单独实体以及奖励月份的日期属性.
  • 每个部门都有他们当前的当月员工,这就是我想要为每个部门存储的内容。对跟踪上个月、上个月等谁是 E-of-the-M 的历史不感兴趣,只是“现在谁是(这个)部门的 IT。”
  • 当然,只是评论。然后创建一个关系,反向关系可能看起来很尴尬,但它主要是 Core Data 所需要的,您不需要在代码中使用它。

标签: swift core-data fetched-property


【解决方案1】:

据我所知,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
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2019-11-19
    • 2018-06-13
    • 1970-01-01
    相关资源
    最近更新 更多