Donc on a deux entities. CDCourse et CDGroup
Il y a une relation many-to-may entre les deux.
La première vue réalise un @FetchRequest sur l’Entity Course et liste les différents objects.
@available(iOS 15.0, *)
struct CoursesList: View {
@FetchRequest(
entity: CDCourse.entity(),
sortDescriptors: [])
var courses: FetchedResults<CDCourse>
var body: some View {
VStack {
ScrollView {
ForEach(courses, id: \.self) { course in
NavigationLink(destination: CourseDetailsView(course:course)) {
CourseCard(course: course).padding()
}
}
}
}
}
}
On passe alors un des objects CDCourse à la vue suivante via la NavigationLink. Sur cette deuxième vue, on liste les CDGroup
@available(iOS 15.0, *)
struct CourseClassesView: View {
var course:CDCourse
var didSave = NotificationCenter.default.publisher(for: .NSManagedObjectContextDidSave)
@State var refreshing: Bool = false
@StateObject var groups = Groups()
@StateObject var courses = Courses()
@State var groupsss:[CDGroup]
@Binding var grooops:[CDGroup]
@ObservedObject var couuurse: CDCourse
var body: some View {
if self.refreshing {
Text("Refreshing")
}else{
List {
ForEach(couuurse.groupsArray2, id: \.self) { group in
Text("No Group Name")
}
}
.onReceive(didSave) { _ in
self.refreshing.toggle()
}
.frame(width: 200, height: 200, alignment: .center)
}
}
}
On peut alors créer un object CDGroup et l’ajouter, via la relation, à l’object CDCourse qu’on a passé. Pour cela, j’utilise cette fonction.
func addGroupToCourse(course:CDCourse, group:CDGroup) {
if let existingCourse = fetchCourse(withID: course.id!),
let existingGroup = fetchGroup(withID: group.id!) {
if ((course.groups?.contains(group)) != nil) {
print("Course & Group found")
print(existingCourse.groups!)
existingCourse.creationDate = Date()
existingCourse.addToGroups(existingGroup)
saveContext()
course.managedObjectContext?.refresh(course, mergeChanges: true)
group.managedObjectContext?.refresh(group, mergeChanges: true)
}
}
}
Tout se passe nickel, le CDGroup est bien ajouté à CDCourse via la relation mais la liste de la deuxième vue ne régit pas, pas de mise à jour. Même si l’on revient à la vue précédente, rien ne se passe.
Cette liste ne sera mise à jour qu’au lancement suivant de l’app.
J’espère être plus clair du coup. Je ne sais pas si cela aide ? 
Merci
Chris