使用关系附加核心数据实体

时间:2020-04-29 00:03:15

标签: ios swift core-data

我有两个核心数据实体,CarServices。我希望汽车具有多种服务,因此我将汽车与Services的类型设为to-many

如果查看数据库,我有一个带有属性的Car表和一个带有属性的Services表,都保存到了各自的表中。

问题是我无法弄清楚要附加到汽车上的服务。查看Services表时,有一列用于“汽车”。我知道Car+CoreDataProperties.swift文件中有一些方法,例如addToServices(_ value: Service)addToServices(_ value: NSSet),但是当我尝试调用这些方法之一并传递服务数据时,出现此错误:< / p>

CoreData: error: +[Services entity] Failed to find a unique match for an NSEntityDescription to a managed object subclass

以下是调用该错误的代码:

func saveToCoreData() {
    let car = Car(context: self.moc)
    let service = Services(context: self.moc)
    service.date = date
    service.serviceType = self.serviceType
    service.serviceCost = self.serviceCost
    service.serviceComplete = self.servicecComplete

    let serviceData: NSSet = [service.date, service.serviceType, service.serviceCost, service.serviceComplete]
    car.addToServices(serviceData)
    try? self.moc.save()
}

为了使所有这些事情变得更加困难,正在通过我使用SwiftUI创建的表单输入数据。

1 个答案:

答案 0 :(得分:1)

  1. 选中self.moc.save()。如果失败,则数据库中没有可见的更改。
  2. addToServices(_ value: Service)addToServices(_ value: NSSet)是重载方法。第一个向Service对象添加一个(单个)Car对象,第二个向Service对象添加一组Car对象。
  3. 要设置汽车服务,您可以使用其他方法:

    • A)(如@nighttalker所述)car.addToServices(service)
    • B) car.addToServices([service])
    • C) A)和B)添加新服务,但如果要替换当前现有的服务,或设置第一次使用汽车,请使用:car.services = [service]

关于错误:car.addToServices(serviceData)失败,因为serviceData既不是Set<Service>也不是Service类型。

相关问题