Uitableview Swift 3-核心数据一对一关系获取值
我的核心数据中有一对一的关系,使用UIAlertAction我保存了一些数据,并且成功地将其保存到核心数据中,没有错误 现在我想获取这些数据并将其设置为tableview中的UILabel 这是我的 使用editActionsForRowAt,我正在保存reps和set的值Uitableview Swift 3-核心数据一对一关系获取值,uitableview,core-data,swift3,one-to-one,Uitableview,Core Data,Swift3,One To One,我的核心数据中有一对一的关系,使用UIAlertAction我保存了一些数据,并且成功地将其保存到核心数据中,没有错误 现在我想获取这些数据并将其设置为tableview中的UILabel 这是我的 使用editActionsForRowAt,我正在保存reps和set的值 func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]?
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let editButton = UITableViewRowAction(style: .normal, title: "Edit") { (rowAction, indexpath) in
let sets = self.workout?.muscleList?[indexpath.row]
let inputAlert = UIAlertController(title: "Sets", message: "Enter reps and sets", preferredStyle: .alert)
inputAlert.addTextField { (textfield:UITextField) in
textfield.placeholder = "Sets"
}
inputAlert.addTextField { (textfield:UITextField) in
textfield.placeholder = "Reps"
}
inputAlert.addAction(UIAlertAction(title: "Save", style: .default, handler: { (action:UIAlertAction) in
let setsTextField = inputAlert.textFields?.first
let repsTextField = inputAlert.textFields?.last
if repsTextField?.text != "" && setsTextField?.text != "" {
print("results: ",(setsTextField?.text)!, " sets + ", (repsTextField?.text)!," reps")
sets?.setAndrep?.sets = setsTextField?.text
sets?.setAndrep?.reps = repsTextField?.text
do{
try sets?.managedObjectContext?.save()
print("saved the sets and reps at row: ",indexpath.row)
}catch{
print("Set and rep could not be added")
}
self.newMusclesTableView.reloadData()
}
}))
inputAlert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
self.present(inputAlert, animated: true, completion: nil)
}
let deleteButton = UITableViewRowAction(style: .destructive, title: "Delete") { (rowAction, indexpath) in
self.deleteMuscle(at: indexPath)
}
deleteButton.backgroundColor = UIColor.red
return [editButton,deleteButton]
}
在我的牢房里
我试图获取保存的值并将其设置为UILabel,但它似乎根本没有获取值
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = newMusclesTableView.dequeueReusableCell(withIdentifier: "muscleCell", for: indexPath) as? muscleListTableViewCell
cell?.cellView.layer.cornerRadius = (cell?.cellView.frame.height)! / 2
if let muscles = workout?.muscleList?[indexPath.row]{
cell?.muscleTitle?.text = muscles.name
cell?.myBtn.addTarget(self, action: #selector(self.btnAction(_:)), for: .touchUpInside)
cell?.setsRepsLabel?.text = muscles.setAndrep?.sets ?? "did not get value"
}
return cell!
}
UILabel被设置为“未获取值”,这意味着它无法获取muscles.setAndrep?.sets
有人能帮我解释一下我做错了什么吗?在我回答问题之前,给我一些提示:
- 尽量减少行间距,以便一眼就能看到整个方法,这在很大程度上有助于可读性(您不必滚动或将眼睛看得太远,一次就可以看到整个方法)(如果您以后确实有一个方法太长,无法在没有任何行间距的屏幕上显示,则该方法通常是一个指示器,需要将其拆分为多个方法)
- 它可能会帮助您将save操作中的代码提取到它自己的方法中,这样您就可以在其他可能希望保存它的地方重用代码,而且您的代码以这种方式更具可读性和模块化(谷歌单一责任原则,这是一种非常有用的编程方式,可以节省你以后调试东西的时间=])
let setrep = self.workout?.muscleList?[indexpath.row]
let sets = inputAlert.textFields?.first?.text
let reps = inputAlert.textFields?.last?.text
saveSetAndRepToMuscleList(sets, reps, setrep)
- 对于您的问题,您是否有更新/获取self.workout?肌肉列表的代码
- 您可能需要检查是否存在使用模型对象的上下文执行保存的问题
try set?.managedObjectContext?.save()
- 查看本指南(请注意,该演讲已过时几年,但仍有助于正确理解概念)
- 代码一直是最新的
setAndrep
关系为零。在编辑操作中,您需要创建一个SetRep
对象,将正确的值分配给它的set
和reps
属性,然后将其分配给set
的setAndrep
属性。我尝试过,但应用程序崩溃了,可能是我在这么做你能告诉我你的方法是怎样的吗@pbasdf@pbasdf在控制台中,它显示结果:3个集合+8个重复在第1行保存集合和重复,这意味着它已成功执行了try set?.managedObjectContext?.save(),但在单元格中未显示
let setrep = self.workout?.muscleList?[indexpath.row]
let sets = inputAlert.textFields?.first?.text
let reps = inputAlert.textFields?.last?.text
saveSetAndRepToMuscleList(sets, reps, setrep)