Присоединение основных объектов данных с использованием отношений - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть два основных объекта данных, Car и Services. Я хочу, чтобы у машины было несколько сервисов, поэтому я установил для машины тип Services a to-many.

Если я посмотрю свою базу данных, у меня будет таблица Car с ее атрибутами и Services таблица с ее атрибутами, обе сохраняются в соответствующих таблицах.

Проблема в том, что я не могу придумать, как получить услугу по прикреплению к машине. При взгляде на таблицу Services есть столбец Car. Я знаю, что в файле Car+CoreDataProperties.swift есть некоторые методы, такие как addToServices(_ value: Service) & addToServices(_ value: NSSet), но когда я пытаюсь вызвать один из этих методов и передать свои служебные данные, я получаю эту ошибку:

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 Ответ

1 голос
/ 29 апреля 2020
  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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...