【发布时间】: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