我正在尝试调试以下代码。
1)CellClass具有IBAction来更改Bool值,该值声明为value:Bool
@IBAction func dashBrnPressed(_ sender: AnyObject) {
value == true ? (value = false) : (value = true)
NotificationCenter.default.post(name: .reload, object: nil)
// reloads the TableView
}
2)我使用UITableView控制器与dequeueReusableCell并获取CoreData。这些行仅负责细胞。 “switchAction”是CoreData的值
if cell.value == true{
switchAction.isOn = true
}else{
switchAction.isOn = false
}
DataBaseController.saveContext()
cell.value = switchAction.isOn
return cell
3)除非我重新启动应用程序,否则它似乎一直在工作。没有崩溃,但默认情况下返回FALSE作为值。我需要将值返回存储到CoreData中,具体取决于按钮是什么语句。
该代码是当然简化的。
最佳答案
我想我看到了问题。在第2部分的代码块中,这是您正在做的事情:
switchAction.isOn
设置为cell.value
的值switchAction.isOn
保存到CoreData cell.value
设置为switchAction.isOn
的值重新启动应用程序时,
cell.value
默认为false,然后将该false覆盖到switchAction.isOn
上并保存回CoreData。因此,即使switchAction.isOn
可能正在加载正确的值,但您还是在看到它之前就将其覆盖。您需要的是另一种分配方式:
cell.value = switchAction.isOn
由于
cell
是可重用的表格视图单元格,因此您可以将该行放在tableView(UITableView, willDisplay: UITableViewCell, forRowAt: IndexPath)
委托函数中,该函数在显示该单元格之前立即被调用。