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
}