Ich füge eine neue Benutzerübung zu einer vorhandenen Benutzerroutine über einen Speicherbefehl hinzu. Um den folgenden Code zu erklären, setze ich den Objektkontext, dann ist die Übung neu (userExercise ist null) Ich führe einen neuen Speicherblock aus.Schwerwiegender Fehler beim Versuch, Kerndatenobjekte über die Beziehung zu speichern
Ich überprüfe dann, ob diese neue Übung zu einer bestehenden Routine hinzugefügt wird (associatedRoutineToAddTo ist ein String-Routine-Name von der vorherigen VC).
Hier ist das Problem. Ich versuche, das UserRoutine-Objekt zu erhalten, zu dem es hinzugefügt werden muss, indem ich ein Prädikat verwende, das auf dem Namen der Routinen aus der Zeichenfolge basiert, die ich von der vorherigen VC übergeben habe. dann versuche ich, die Übung der Routine hinzuzufügen. Dies verursacht den Absturz.
Der Rest des Codes ist nicht zu relevant, da es in Bezug auf das Speichern einer Bearbeitung oder einer neuen Übung mit keiner Elternroutine gut funktioniert, es ist nur dieser eine Teil.
Hier ist, was ich versuche:
func getMainContext() -> NSManagedObjectContext {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
return appDelegate.persistentContainer.viewContext
}
func createExercise() {
print("SAVE EXERCISE PRESSED")
let managedObjectContext = getMainContext()
if userExercise == nil {
print("SAVING THE NEW EXERCISE")
let newUserExercise = UserExercise(context: self.managedObjectContext!)
newUserExercise.name = userExerciseName.text
newUserExercise.sets = Int64(userSetsCount)
newUserExercise.reps = Int64(userRepsCount)
newUserExercise.weight = Double(self.userExerciseWeight.text!)!
newUserExercise.dateCreated = NSDate()
if self.associatedRoutineToAddTo != nil {
let existingUserRoutine = UserRoutine(context: managedObjectContext)
let request: NSFetchRequest<UserExercise> = UserExercise.fetchRequest()
request.predicate = NSPredicate(format: "usersroutine.name == %@", self.associatedRoutineToAddTo!)
existingUserRoutine.addToUserexercises(newUserExercise)
do {
try managedObjectContext.save()
} catch {
fatalError("Failure to save context: \(error)")
}
} else if self.associatedRoutineToAddTo == nil {
print("THIS IS A FRESH EXERCISE WITHOUT A PARENT ROUTINE")
}
}
Der Fehler lautet:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Illegal attempt to establish a relationship 'usersroutine' between objects in different contexts (source = <UserExercise: 0x618000280e60>
edit: mein holen Code für die Überprüfung überarbeitet: Sie
let fetchRequest: NSFetchRequest<UserRoutine> = UserRoutine.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "usersroutine.name == %@", self.associatedRoutineToAddTo!)
do {
existingUserRoutine = try managedObjectContext.fetch(fetchRequest) as! UserRoutine
print("Routine Below Fetched")
print(existingUserRoutine)
} catch {
print("Fetch Failed")
}
existingUserRoutine.addToUserexercises(newUserExercise)
Bitte zeigen Sie das Crash-Protokoll und den Fehler, der ausgedruckt wird – jrturton
Ich habe das OP – jwarris91