【问题标题】:Joining multiple relationships in swift快速加入多个关系
【发布时间】:2017-05-11 14:51:45
【问题描述】:

请帮忙。

我有 3 个NSManaged 对象。

说员工、工资单、PayItem

每个Employee可以有多个Payslips,每个Payslip可以有多个PayItems

所以关系是 Employee > Payslip

都设置为NSManagedOjects

然后假设我有 3 个实例:(假设我通过将其添加到 NSManagedObject 类来初始化每个实例:

  convenience init(context: NSManagedObjectContext)
    {
    let entity = NSEntityDescription.entity(forEntityName: <entity>, in: context)!
    self.init(entity: entity, insertInto: context)'
    }

那我可以声明了。

 var employee = Employee(context: context)
        var payslip = Payslip(context: context)
        var payItem = PayItem(context: context) 

然后我可以:

employee.addToPayslip(payslip) //Using the function created for me by default.

但如果我尝试:

payslip.payItem = payItem

我总是得到错误:

在 NSManagedObject 类上调用指定初始化程序失败 '支付项目'

总而言之,我正在尝试将员工链接到工资单,即一对多,然后将工资单链接到支付项目,即一对多。为什么我的日子这么难过?

【问题讨论】:

  • 据我所知,创建一个 3 类 Employee 、 PaySlip 和 Payitem 。在 Employee 类中创建一个 paySlip 属性数组。在 Payslip 类中创建一个 payItem 属性数组。只是一个模型。我没有使用 NSManagedObject。
  • 感谢您的建议。我确实可以使用类数组。但在这种情况下。我特别想使用核心数据和 NSManagedObjects
  • 代码看起来不错。我怀疑你的模型有问题。
  • 我来。我已经搜索了我的模型,但我无法找到答案。 Payslip 可以加入员工罚款,payItem 不能加入 payslip。这让我疯狂。从字面上看,我已经花了几周的时间。
  • 该错误表明您在代码中的某处调用了普通的init() 方法,而不是您创建的便利初始化程序。这可能是在声明一个具有您从不使用的默认值的变量时(如this question)。如果无法追踪,请尝试覆盖普通的init,在其中放置断点,然后检查堆栈跟踪。

标签: ios swift core-data entity-relationship nsmanagedobject


【解决方案1】:

原来我有一个返回未初始化版本的 PayItem 的函数。花了一段时间才找到,但解决了我的问题。

【讨论】:

    猜你喜欢
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    相关资源
    最近更新 更多