Я совершенно новичок в Realm и пытаюсь добавить некоторые данные в свою базу данных. У меня есть тренировки, которые состоят из упражнений. Каждая тренировка имеет идентификатор, дату и список упражнений. В моем табличном представлении я создаю два тренинга, каждый из которых имеет свой идентификатор, после чего я добавляю несколько упражнений к первому, а когда пытаюсь добавить ко второму, я получаю сообщение об ошибке: «Попытка создать объект типа «TrainingExercise» с существующим значением первичного ключа «Thruster». " Я не понимаю, почему он пытается добавить это к предыдущему обучению. Я получаю обучение по идентификатору из базы данных, и я проверил, передается ли правильный идентификатор в функцию и все. Но когда я ставлю точку останова, идентификатор тренировки остается прежним, и я не могу понять причину этого. Может ли кто-нибудь помочь мне решить это?
Вот моя тренировочная модель:
class Training: Object {
@objc dynamic var id = 0
@objc dynamic var date = NSDate()
var exercises = RealmSwift.List<TrainingExercise>()
convenience init(date: NSDate, exercise: TrainingExercise) {
self.init()
self.date = date
self.exercises.append(exercise)
}
override class func primaryKey() -> String? {
return "id"
}
}
Вот моя модель упражнений:
class TrainingExercise: Object {
@objc dynamic var name: String = ""
let sets = RealmSwift.List<GymSet>()
convenience init(name: String, gymSet: GymSet) {
self.init()
self.name = name
self.sets.append(gymSet)
}
override class func primaryKey() -> String? {
return "name"
}
}
class GymSet: Object {
@objc dynamic var reps: Int = 0
@objc dynamic var kilos: Double = 0
@objc dynamic var time: String = ""
}
А вот функция, которую я использую, чтобы добавить упражнения к тренировке
func addExerciseForTraining(trainingId: Int, exercise: TrainingExercise) {
let training = getTrainingById(id: trainingId)
try? database.write {
training.exercises.append(exercise)
}
try? database.write {
database.create(Training.self, value: training, update: true)
}
}
func getTrainingById(id: Int) -> Training {
let training = database.object(ofType: Training.self, forPrimaryKey: id)
return training!
}