Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 领域数组索引超出范围_Ios_Arrays_Swift_Uibutton_Realm - Fatal编程技术网

Ios 领域数组索引超出范围

Ios 领域数组索引超出范围,ios,arrays,swift,uibutton,realm,Ios,Arrays,Swift,Uibutton,Realm,如果用户单击按钮,我想将数据保存到域中。此外,如果用户单击该按钮,则应更新视图。我有以下代码: @IBAction func saveAction(_ sender: UIButton) { if currentLogWeightTextField.text!.isEmpty || currentLogRepsTextField.text!.isEmpty || currentLogRPETextField.text!.isEmpty { errorLabel.i

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

    @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()
            }
        }
    }
}
这些是相关属性:

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

excercisesFromPlan = plan?.excercises
从来没有人打过电话。我找了几个小时这个问题,但找不到。。 奇怪的是,如果我从save函数中注释掉以下内容,它工作得很好,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
        }

很抱歉,有这么多代码。。有人知道为什么这不起作用吗?提前谢谢

如果不是因为你说标签正在更新,我会说你可能在
errorLabel.ishiden=false
之后返回
return
,因为上面的
if let
中的一个文本标签文本字符串为空或不是一个数字,因此您将其传递到的
Float
Int
初始化器总是失败,导致您在下面的else中点击回车键,并在点击最后一个
if
之前保留该方法-您绝对确定调用了
if
吗?感谢您的回复,是的,我绝对确定调用了最后一个if。我把打印函数放进去,它们被调用了。只有最后一个else从未调用。获取错误。。索引超出范围是因为我将linelet设置为save=exercisesfromplan![ExerciseCounter]。设置[setCounter]这必须让setToSave=ExercisesFromPlan![ExerciseCounter]。设置[setCounter-1]如果不是因为您说标签正在更新,我会说您可能在
返回时返回
errorLabel.isHidden=false
之后,因为上面的
if let
中的一个文本标签文本字符串为空或不是一个数字,因此您将其传递到的
Float
Int
初始化器总是失败,导致您在下面的else中点击回车键,并在点击最后一个
if
之前保留该方法-您绝对确定调用了
if
吗?感谢您的回复,是的,我绝对确定调用了最后一个if。我把打印函数放进去,它们被调用了。只有最后一个else从未调用。获取错误。。索引超出范围是因为我将linelet设置为save=exercisesfromplan![ExerciseCounter]。设置[setCounter]这必须让setToSave=ExercisesFromPlan![练习计数器].设置[设置计数器-1]
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{
            let finished = plan!.excercises.count - 1
            if excerciseCounter == finished{
                performSegue(withIdentifier: SegueIdentifier.finishedWorkout, sender: nil)
                return
            }
            else{
            excerciseCounter += 1
            setCounter = 1
            setupLabels()
            }
        }
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
        }