我正在尝试调试以下代码。

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)委托函数中,该函数在显示该单元格之前立即被调用。

    10-08 05:26