Быстро установить или обновить актив в основных данных

  • Две сущности
  • Гимнаст один на один, чтобы встретиться
  • Я хотел бы, чтобы, когда я сохраняю новую встречу, она назначается в качестве встречи каждой гимнастке, где они могут затем набрать свои индивидуальные оценки для каждого события.

Может быть, я совершенно не прав в своей логике, но вот что я пытаюсь сделать

let request = NSFetchRequest (entityName: "Gymnast")

    do {

        let entities = try AD.managedObjectContext.executeFetchRequest(request) as! [Gymnast]

        for item in entities {

            if let first = item.valueForKey("firstName"), last = item.valueForKey("lastName") {

                print("Name: \(first) \(last)")

                let myMeet = NSEntityDescription.insertNewObjectForEntityForName("Meet", inManagedObjectContext: AD.managedObjectContext) as! Meet

                myMeet.meetName = "Winter Classic"

                let myMeets = item.meets!.mutableCopy() as! NSMutableSet
                myMeets.addObject(myMeet)

                item.meets = myMeets.copy() as? NSSet

                AD.saveContext()

            }

        }

    } catch {

    }
}

}

1 ответ

Я думаю, что не идеально копировать Meet объект снова и снова для каждого Gymnast, Например, meetName будет храниться несколько раз. Я не уверен, что это предназначено.

Однако в соответствии с вашими настройками ваша проблема заключается в том, как вы назначаете отношение ко многим. Для одного ко многим всегда проще просто установить отношение один к одному. (Помните, что в модели базовых данных всегда существует обратная связь.)

Таким образом,

myMeet.gymnast = item

это все, что тебе нужно.

Чтобы добавить и удалить отношения "многие", вы можете использовать это расширение:

// Support adding to many-to-many relationships

extension NSManagedObject {
    func addObject(value: NSManagedObject, forKey key: String) {
        let items = self.mutableSetValueForKey(key)
        items.addObject(value)
    }

    func removeObject(value: NSManagedObject, forKey key: String) {
        let items = self.mutableSetValueForKey(key)
        items.removeObject(value)
    }
}
Другие вопросы по тегам