Mon appli crash avec le message : Thread 1: "Illegal attempt to establish a relationship 'utilisateur' between objects in different contexts .
Le probleme est que cela arrive seulement avec le simulateur iphone 15 (17.0.1). Elle fonctionne avec le simulateur IPAD. avec d'autres simulateur, avec mon telephone et avec mon Ipad.
Voici mes modeles:
@Model
class ScoreUtilisateur {
@Attribute(.unique) var id: UUID
@Attribute var reussi: Bool
@Attribute var date: Date
@Relationship var utilisateur: Utilisateur
@Relationship var question: Question
init(utilisateur: Utilisateur, question: Question, reussi: Bool, date: Date = Date()) {
self.id = UUID()
self.utilisateur = utilisateur
self.question = question
self.reussi = reussi
self.date = date
}
}
@Model
class Utilisateur : Identifiable {
@Attribute(.unique) var id: UUID
var nom: String
var avatar: String?
@Relationship(deleteRule: .cascade, inverse: \ScoreUtilisateur.utilisateur)
var scores: [ScoreUtilisateur]
init(nom: String, avatar: String?) {
self.id = UUID()
self.nom = nom
self.avatar = avatar
self.scores = []
}
}
@Model
class Question {
@Attribute(.unique)
var id: UUID
var typeQuestion: String
var enonce: String
var theorie: String
var img: String = ""
var score : Bool = false
@Relationship(deleteRule:.cascade, inverse: \Reponse.question) var reponses: [Reponse] = []
@Relationship var niveau: Niveau?
init(id: UUID = UUID(), typeQuestion : String,enonce: String, theorie : String, niveau: Niveau) {
self.id = id
self.typeQuestion = typeQuestion
self.enonce = enonce
self.theorie = theorie
self.niveau = niveau
}
init(id: UUID = UUID(), typeQuestion : String,enonce: String, theorie : String,img: String, niveau: Niveau) {
self.id = id
self.typeQuestion = typeQuestion
self.enonce = enonce
self.theorie = theorie
self.niveau = niveau
self.img = img
}
}
et voici la fonction qui crash:
// mettre a jour la table scoreUtilisateur
func mettreAJourScoreUtilisateur(utilisateur: Utilisateur,
question: Question,
reussi: Bool,
date: Date = Date(), context: ModelContext) {
// trouver le user
let users = utilisateurs.filter {$0.id == utilisateur.id}
guard let user = users.first else {
return
}
// verifier si le score existe
let score = scoreUtilisateur.filter {$0.question.id == question.id && $0.utilisateur.id == user.id}
if score.count > 0 {
scoreUtilisateur.filter {$0.question.id == question.id && $0.utilisateur.id == user.id}[0].reussi = reussi
scoreUtilisateur.filter {$0.question.id == question.id && $0.utilisateur.id == user.id}[0].date = date
try? context.save()
print("Question mise a jour : \(question.enonce)")
print("Question reussi? : \(reussi)")
} else {
let scoreUtilisateur = ScoreUtilisateur(utilisateur: user, question: question, reussi: reussi, date: date)
context.insert(scoreUtilisateur)
try? context.save()
print("Question ajoutee : \(question.enonce)")
print("Question reussi? : \(reussi)")
}
}
Merci de vos retours
iPhone 14, iOS 18