领域数组索引超出范围

时间:2017-02-12 15:42:17

标签: ios arrays swift uibutton realm

如果用户点击按钮,我想将数据保存到领域。此外,如果用户单击该按钮,则应更新视图。我有以下代码:

    @IBAction func saveAction(_ sender: UIButton) {
    if currentLogWeightTextField.text!.isEmpty || currentLogRepsTextField.text!.isEmpty || currentLogRPETextField.text!.isEmpty {
        errorLabel.isHidden = false
        return
    }
    else{
        if let weight = Float(currentLogWeightTextField.text!), let reps = Int(currentLogRepsTextField.text!), let rpe = Float(currentLogRPETextField.text!){
            errorLabel.isHidden = true
            let setToSave = excercisesFromPlan![excerciseCounter].sets[setCounter]
            do{
                try realm.write{
                    setToSave.weight = weight
                    setToSave.repeats = reps
                    setToSave.rpe = rpe
                }
            }
            catch{
                print(error)
            }
        }
        else{
            errorLabel.isHidden = false
            return
        }
        if setCounter < excercisesFromPlan![excerciseCounter].sets.count{
            setCounter += 1
            setupLabels()
            print(setCounter)
            print(excercisesFromPlan![excerciseCounter].sets.count)
        }
        else{
            let finished = plan!.excercises.count - 1
            if excerciseCounter == finished{
                performSegue(withIdentifier: SegueIdentifier.finishedWorkout, sender: nil)
                return
            }
            else{
            excerciseCounter += 1
            setCounter = 1
            setupLabels()
            }
        }
    }
}

这是我的setupLabel方法:

    func setupLabels(){
    if let excercise = excercisesFromPlan?[excerciseCounter]{
        excerciseNameLabel.text = "\(excercise.name)"
        setsNumberLabel.text = "\(setCounter)/\(excercise.sets.count)"
    }
}

以下是相关属性:

var excercisesFromPlan: List<Excercise>?
var plan: TrainingPlan?
var excerciseCounter = 0
var setCounter = 1

excercisesFromPlan = plan?.excercises

计划属性是通过segue给出的。

这些是我的模型类:

class TrainingPlan: Object {

dynamic var trainingPlanID = NSUUID().uuidString

dynamic var routine: Routine?
dynamic var workout: Workout?
dynamic var selected = false
dynamic var name = ""
dynamic var trainingPlanDescription = ""
dynamic var creationDate = Date(timeIntervalSince1970: 1)
dynamic var lastChangeDate = Date(timeIntervalSince1970: 1)
dynamic var lastUsed = Date(timeIntervalSince1970: 1)
let excercises = List<Excercise>()

override class func primaryKey() ->String?{
    return "trainingPlanID"
} 

}

class Excercise: Object {

dynamic var excerciseID = NSUUID().uuidString

dynamic var trainingsplan: TrainingPlan?
dynamic var selected = false
dynamic var name = ""
dynamic var excerciseDescription = ""
dynamic var muscleGroup = ""
dynamic var record = 0
dynamic var picture: NSData?
dynamic var copied = false
let sets = List<TrainingSet>()


override class func primaryKey() ->String?{
    return "excerciseID"
}

override static func indexedProperties() -> [String] {
    return ["name"]
}

}

我遇到的问题是,如果我使用此代码并单击“保存”按钮,则标签正在更新,计数器也正常工作。唯一的问题是else语句

else{
            let finished = plan!.excercises.count - 1
            if excerciseCounter == finished{
                performSegue(withIdentifier: SegueIdentifier.finishedWorkout, sender: nil)
                return
            }
            else{
            excerciseCounter += 1
            setCounter = 1
            setupLabels()
            }
        }

从未被调用过。我现在正在寻找这个问题几个小时,但我找不到它.. 奇怪的是,如果我从保存函数中注释掉以下内容,它就能完美地运行并且else语句被正确调用:

if let weight = Float(currentLogWeightTextField.text!), let reps = Int(currentLogRepsTextField.text!), let rpe = Float(currentLogRPETextField.text!){
            errorLabel.isHidden = true
            let setToSave = excercisesFromPlan![excerciseCounter].sets[setCounter]
            do{
                try realm.write{
                    setToSave.weight = weight
                    setToSave.repeats = reps
                    setToSave.rpe = rpe
                }
            }
            catch{
                print(error)
            }
        }
        else{
            errorLabel.isHidden = false
            return
        }

抱歉这么多代码..有谁知道为什么这不起作用?提前谢谢!

0 个答案:

没有答案