我有下一个代码来更新我的锻炼:
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 时,没有在异步块中添加肌肉。
编辑:
当我发现在锻炼.肌肉中缺少反向关系时,现在我添加了它,看起来 CoreStore 正确更新锻炼实体。
但是现在如果我多次调用函数,我还有另一个问题:
- 第一次通话
addMuscleGroups([1, 2, 3, 4, 5]...) 打印(unwrappedWorkout.muscles) [1, 2, 3, 4, 5]
第二次调用 addMuscleGroups([1, 2, 3, 4, 5, 6, 7]...)
打印(unwrappedWorkout.muscles)[6, 7]
(为了简化示例,我使用了 1、2、3、4、5、6、7 数字),但实际上有 MusclEntity 对象
因此,由于 addMuscleGroups 函数的第二次调用 unwrappedWorkout.muscles 有两个肌肉对象而不是 7 个。
我添加了短视频: