не может решить отношения один ко многим - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь понять coredata. Что идет хорошо, так это добавление Хонда и трюков. Это аккуратно положить gewicht в отношениях. Но в тот момент, когда я хочу добавить дополнительный гевихт позже, я сталкиваюсь с проблемой, что я не могу этого сделать.

Я вижу следующее сообщение:

NSManagedObject 'не конвертируется в' Hond '

My enitys

Это мой код, в котором я пытаюсь добавить вес

guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
        let context = appDelegate.persistentContainer.viewContext

        let hondEntity = NSEntityDescription.entity(forEntityName: "Hond", in: context)!
        let hond = NSManagedObject(entity: hondEntity, insertInto: context)

        let gewichtHondEntity = NSEntityDescription.entity(forEntityName: "GewichtHond", in: context)!
        let gewichtHond = NSManagedObject(entity: gewichtHondEntity, insertInto: context)

        let nieuwGewicht = GewichtHond(context: context)
        nieuwGewicht.datum = Date()
        nieuwGewicht.gewicht = Double("38")!
        //gewichtHond.setValue(Date(), forKey: "datum")
        //gewichtHond.setValue(Double("38"), forKey: "gewicht")
        Hond.addToGewichten(gewichtHond) //NSManagedObject' is not convertible to 'Hond

        do {
            try context.save()
            print("Saved")
        } catch let error as NSError {
            print("Could not save. \(error), \(error.userInfo)")
        }

My Hond + CoreDataProperties.swift

    extension Hond {

        @nonobjc public class func fetchRequest() -> NSFetchRequest<Hond> {
            return NSFetchRequest<Hond>(entityName: "Hond")
        }

        @NSManaged public var chipnummer: Int64
        @NSManaged public var dierenarts: String?
        @NSManaged public var geboortedatum: Date
        @NSManaged public var geslacht: Int16
        @NSManaged public var hondId: String?
        @NSManaged public var kleur: String?
        @NSManaged public var naam: String?
        @NSManaged public var orderID: Int16
        @NSManaged public var plaatsVanChip: String?
        @NSManaged public var telefoonnummerDierenarts: String?
        @NSManaged public var vachttype: String?
        @NSManaged public var gewichten: Set<GewichtHond>

    }

    // MARK: Generated accessors for gewichten
    extension Hond {

        @objc(addGewichtenObject:)
        @NSManaged public func addToGewichten(_ value: GewichtHond)

        @objc(removeGewichtenObject:)
        @NSManaged public func removeFromGewichten(_ value: GewichtHond)
/*
       @objc(addGewichten:)
       @NSManaged public func addToGewichten(_ values: NSSet)

       @objc(removeGewichten:)
       @NSManaged public func removeFromGewichten(_ values: NSSet)
*/ 
    }

Как мне добавить дополнительный гевихт?

1 Ответ

0 голосов
/ 31 августа 2018

Ошибка немного вводит в заблуждение. В основном это говорит о том, что тип отношения gewicht является набором, а не числом. Это также указывает на помехи атрибуту gewicht в GewichtHond.

Чтобы избежать путаницы в именовании, настоятельно рекомендуется называть отношения с именем сущности партнера и отношения один к одному в единственном числе и отношения один ко многим в множественном числе. Отношение один-ко-многим должно быть названо gewichten. Предполагается, что тип в Swift Set<GewichtHond> не указан NSSet

Чтобы добавить и удалить экземпляр GewichtHond в / из набора, по крайней мере, эти два метода доступа необходимы в подклассе Hond

// MARK: Generated accessors for gewichten
extension Hond {

    @objc(addGewichtenObject:)
    @NSManaged public func addToGewichten(_ value: GewichtHond)

    @objc(removeGewichtenObject:)
    @NSManaged public func removeFromGewichten(_ value: GewichtHond)

}

Теперь создайте экземпляр Hond и экземпляр GewichtHond и добавьте его в набор отношений

let hond = NSEntityDescription.insertNewObject(forEntityName: "Hond", into: context) as! Hond
let gewichtHond = NSEntityDescription.insertNewObject(forEntityName: "GewichtHond" , into: context) as! GewichtHond

hond.addToGewichten(gewichtHond)

Примечание: в точечной нотации подкласса NSManagedObject hond1.datum = Date() гораздо удобнее ( и безопаснее ), чем метод KVC hond1.setValue(Date(), forKey: "datum").

...