I have a Workout that has an inverse RelationShip with Exercise:
<code>@Model
class Workout: Identifiable {
var id: UUID
var name: String
@Relationship(deleteRule: .cascade, inverse: Exercise.workout) //when deleting a workout you delete all exericses that happened during that workout
var exercises: [Exercise]?
@Model
class Exercise: Identifiable {
var id: UUID
var exerciseName: ExerciseName
@Relationship(deleteRule: .cascade, inverse: MySet.exercise)
var sets: [MySet]? //When an Exercise gets Deleted all Sets associated need to get deleted
var date: Date
var workout: Workout
</code>
<code>@Model
class Workout: Identifiable {
var id: UUID
var name: String
@Relationship(deleteRule: .cascade, inverse: Exercise.workout) //when deleting a workout you delete all exericses that happened during that workout
var exercises: [Exercise]?
@Model
class Exercise: Identifiable {
var id: UUID
var exerciseName: ExerciseName
@Relationship(deleteRule: .cascade, inverse: MySet.exercise)
var sets: [MySet]? //When an Exercise gets Deleted all Sets associated need to get deleted
var date: Date
var workout: Workout
</code>
@Model
class Workout: Identifiable {
var id: UUID
var name: String
@Relationship(deleteRule: .cascade, inverse: Exercise.workout) //when deleting a workout you delete all exericses that happened during that workout
var exercises: [Exercise]?
@Model
class Exercise: Identifiable {
var id: UUID
var exerciseName: ExerciseName
@Relationship(deleteRule: .cascade, inverse: MySet.exercise)
var sets: [MySet]? //When an Exercise gets Deleted all Sets associated need to get deleted
var date: Date
var workout: Workout
Then In another view I pass a workout and create a new set with that workout as a Parent:
<code>Button {
if(selection != nil) {
let newExercise = Exercise(id: UUID(),exerciseName: selection!, date: workout.endTime, workout: workout)
modelContext.insert(newExercise)
let set = MySet(id: UUID(), weight: 0, reps: 0,isCompleted: false,date: Date.now ,exercise: newExercise)
modelContext.insert(set)
dismiss()
}
}
</code>
<code>Button {
if(selection != nil) {
let newExercise = Exercise(id: UUID(),exerciseName: selection!, date: workout.endTime, workout: workout)
modelContext.insert(newExercise)
let set = MySet(id: UUID(), weight: 0, reps: 0,isCompleted: false,date: Date.now ,exercise: newExercise)
modelContext.insert(set)
dismiss()
}
}
</code>
Button {
if(selection != nil) {
let newExercise = Exercise(id: UUID(),exerciseName: selection!, date: workout.endTime, workout: workout)
modelContext.insert(newExercise)
let set = MySet(id: UUID(), weight: 0, reps: 0,isCompleted: false,date: Date.now ,exercise: newExercise)
modelContext.insert(set)
dismiss()
}
}
this shows up straight away on the editworkoutview but when I go back to my workout list view I need to refresh the app to see the number of exercises a workout has. that view queries workouts and then I use its exercises to see the number of exericses that workout has:
<code> @Query(animation: .easeIn) var workouts: [Workout]
ForEach(workouts) { workout in
NavigationLink(value: workout) {
if let exercises = workout.exercises {
Text("(exercises.count)x Exercises")
.font(.system(size: 13))
}
</code>
<code> @Query(animation: .easeIn) var workouts: [Workout]
ForEach(workouts) { workout in
NavigationLink(value: workout) {
if let exercises = workout.exercises {
Text("(exercises.count)x Exercises")
.font(.system(size: 13))
}
</code>
@Query(animation: .easeIn) var workouts: [Workout]
ForEach(workouts) { workout in
NavigationLink(value: workout) {
if let exercises = workout.exercises {
Text("(exercises.count)x Exercises")
.font(.system(size: 13))
}
The Text only displays the correct amount of exercises when I refresh the app.