Ios 将多个UITableView行中的值保存到域列表<&燃气轮机;()

Ios 将多个UITableView行中的值保存到域列表<&燃气轮机;(),ios,swift,xcode,realm,realm-list,Ios,Swift,Xcode,Realm,Realm List,这就是我的对象类的外观: www.swift: class Workout: Object { @objc dynamic var date: Date? // List of exercises (to-many relationship) var exercises = List<Exercise>() } 我试图使用如下按钮操作将其保存到领域: let newWorkout = Workout() let newExercise = Exercis

这就是我的
对象
类的外观:

www.swift:

class Workout: Object {

    @objc dynamic var date: Date?
    // List of exercises (to-many relationship)
    var exercises = List<Exercise>()

}
我试图使用如下按钮操作将其保存到领域:

let newWorkout = Workout()
let newExercise = Exercise()
let newSet = Set() 

let nowDate = Date()
func saveWorkout() {
    if numberOfSets > 0 {

        print("Saving workout...")

        let realm = try! Realm()

        let cells = self.tableView.visibleCells as! Array<ExerciseCreatorCell>

        for cell in cells {
            if cell.kgTextField.text == ""  {
                cell.kgTextField.shake()
                return
            } else if cell.repsTextField.text == "" {
                cell.repsTextField.shake()
                return
            } else { // Add every single set
                newSet.reps = Int(cell.repsTextField.text!)!
                newSet.kg = Double(cell.kgTextField.text!)!
                newExercise.sets.append(newSet)
            }
        }

        print("NEXT")
        newExercise.name = exerciseNameButton.currentTitle


        newWorkout.exercises.append(newExercise)
        newWorkout.date = nowDate

        try! realm.write {
            realm.add(newWorkout)
            print("Saved!")
        }
    } else {
        let alert = UIAlertController(title: nil, message: "Please add any exercise before saving!", preferredStyle: UIAlertController.Style.alert)
        alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))
        self.present(alert, animated: true, completion: nil)
    }
}
let newWorkout=Workout()
让newExercise=Exercise()
让newSet=Set()
让nowDate=Date()
func saveWorkout(){
如果numberOfSets>0{
打印(“保存训练…”)
让realm=try!realm()
让cells=self.tableView.visibleCells为!数组
细胞中的细胞{
如果cell.kgTextField.text==“”{
cell.kgTextField.shake()单元格
返回
}否则,如果cell.repsTextField.text==“”{
cell.repsTextField.shake()
返回
}else{//添加每一个集合
newSet.reps=Int(cell.repsTextField.text!)!
newSet.kg=Double(cell.kgTextField.text!)!
newExercise.set.append(新闻集)
}
}
打印(“下一页”)
newExercise.name=exerciseNameButton.currentTitle
newWorkout.exercises.append(newExercise)
newWorkout.date=nowDate
试试看!写吧{
realm.add(新训练)
打印(“已保存!”)
}
}否则{
let alert=UIAlertController(标题:nil,消息:“保存前请添加任何练习!”,首选样式:UIAlertController.Style.alert)
addAction(UIAlertAction(标题:“确定”,样式:UIAlertAction.style.default,处理程序:nil))
self.present(警报、动画:true、完成:nil)
}
}

UITableView
中的每一行表示一个训练集。问题是,;假设我总共添加了4组/行,每组的kg和reps值不同。保存后,将保存所有4组的最后一组/行。有任何提示吗?

self.tableView.visibleCells不建议使用,原因如下:1。若你们有更多的行可以显示在屏幕上,那个么visiblecells只有屏幕上的行。2.细胞被重复使用。可能第10单元的数据与第1单元的数据相同。对于noe move newSet=Set(),在else{//中添加每一个集合。它将修复该集合save@Sammy这很有效,谢谢!你有其他解决方案吗?因为不推荐使用可视单元格?Sammy是正确的。除此之外,最好的方法是每次用户输入一个新的集合时都保存一个新的集合(这会依次在tableView中创建一行)。为什么要同时保存所有行?如何保存数据(repsTextField.text和kgTextField.text)对于每一行?我假设用户输入它们。您需要有一个从单元格到tableView控制器的委托。当用户在这些文本字段中输入数据时,您将其保存到variable@rs7我认为这是最简单的解决方案。我如何做到这一点?我如何每次保存一个新行,而不是每次都保存同一行?
class Set: Object {

    @objc dynamic var reps: Int = 0
    @objc dynamic var kg: Double = 0.0
    @objc dynamic var notes: String?
    // Define an inverse relationship to be able to access your parent workout for a particular set (if needed)
    var parentExercise = LinkingObjects(fromType: Exercise.self, property: "sets")

    convenience init(numReps: Int, weight: Double, aNote: String) {
       self.init()
       self.reps = numReps
       self.kg = weight
       self.notes = aNote
    }
}
let newWorkout = Workout()
let newExercise = Exercise()
let newSet = Set() 

let nowDate = Date()
func saveWorkout() {
    if numberOfSets > 0 {

        print("Saving workout...")

        let realm = try! Realm()

        let cells = self.tableView.visibleCells as! Array<ExerciseCreatorCell>

        for cell in cells {
            if cell.kgTextField.text == ""  {
                cell.kgTextField.shake()
                return
            } else if cell.repsTextField.text == "" {
                cell.repsTextField.shake()
                return
            } else { // Add every single set
                newSet.reps = Int(cell.repsTextField.text!)!
                newSet.kg = Double(cell.kgTextField.text!)!
                newExercise.sets.append(newSet)
            }
        }

        print("NEXT")
        newExercise.name = exerciseNameButton.currentTitle


        newWorkout.exercises.append(newExercise)
        newWorkout.date = nowDate

        try! realm.write {
            realm.add(newWorkout)
            print("Saved!")
        }
    } else {
        let alert = UIAlertController(title: nil, message: "Please add any exercise before saving!", preferredStyle: UIAlertController.Style.alert)
        alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))
        self.present(alert, animated: true, completion: nil)
    }
}