Быстро установить или обновить актив в основных данных
- Две сущности
- Гимнаст один на один, чтобы встретиться
- Я хотел бы, чтобы, когда я сохраняю новую встречу, она назначается в качестве встречи каждой гимнастке, где они могут затем набрать свои индивидуальные оценки для каждого события.
Может быть, я совершенно не прав в своей логике, но вот что я пытаюсь сделать
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)
}
}