У меня есть следующий код для обновления моей тренировки:
func addMuscleGroups(muscleGroups: [MusclEntity], toWorkout: WorkoutEntity, completion: @escaping (ResultInfo<WorkoutEntity>) -> Void) {
CoreStore.perform(
asynchronous: { (transaction) -> WorkoutEntity? in
let workout = transaction.edit(toWorkout)!
for muscle in muscleGroups {
let editedMuscle = transaction.edit(muscle)!
workout.muscles?.insert(editedMuscle)
}
return workout
},
success: { (transactionWorkout) in // here we have muscles for transactionWorkout
guard let unwrappedTransactionWorkout = transactionWorkout else {
return
}
let workout = CoreStore.fetchExisting(unwrappedTransactionWorkout) // there are no muscles objects
guard let unwrappedWorkout = workout else {
return
}
completion(.data(unwrappedWorkout))
},
failure: { (error) in
completion(.error(StackedError.internalFetchingDataError(message: error.debugDescription)))
})
}
Но, как я вижу, я вставил мышцы при выполнении асинхронного блока, но затем, когда я выполняю fetchExisting, мышц не было добавлено в асинхронный блок.
РЕДАКТИРОВАНИЕ:
Как я выяснил, в workout.muscles отсутствуют обратные связи, теперь я добавил его и выглядит как корректная сущность тренировки обновления CoreStore.
Но сейчасУ меня есть другая проблема, если я вызываю функцию несколько раз:
- первый вызов
addMuscleGroups ([1, 2, 3, 4, 5] ...) print (unwrappedWorkout.muscles) [1, 2, 3, 4, 5]
второй вызов addMuscleGroups ([1, 2, 3, 4, 5, 6, 7] ...)
print (unwrappedWorkout.muscles) [6, 7]
(для упрощения примера я использовал цифры 1, 2, 3, 4, 5, 6, 7), но на самом деле объекты MusclEntity
, поэтому в результате второго вызоваФункция addMuscleGroups unwrappedWorkout.muscles имеет два объекта мышц вместо 7.
Я добавил короткое видео:
https://www.screencast.com/t/63cRGKpk0Q