我是 Realm 的新手,我正在尝试为我的数据库添加一些数据。我有一个由练习组成的培训。每个训练都有 ID、日期和练习列表。在我的表格视图中,我创建了两个培训,每个培训都有自己的 id,之后我向第一个添加一些练习,当我尝试添加到第二个时,我收到一个错误:“尝试创建类型的对象'TrainingExercise' 与现有的主键值 'Thruster'。” 我不明白为什么它会尝试将此添加到以前的培训中。我从数据库中通过 id 接受培训,然后检查是否将正确的 id 传递给函数,仅此而已。但是当我放断点时,训练的 id 是以前的,我不明白这是为什么。有人可以帮我解决这个问题吗?这是我的训练模型:
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!
}