如何将复选框的状态保存到Swift中的核心数据?

如何将复选框的状态保存到Swift中的核心数据?,swift,xcode,core-data,checkbox,Swift,Xcode,Core Data,Checkbox,**我英语说得不好。请原谅我笨拙的英语 我正在使用复选框处理一个待办事项列表项目。我找不到将复选框的状态保存到核心数据的方法 这是我现在使用的代码的一部分Tasks是实体(类定义),它将isMarked标记为布尔属性。 (为了简单起见,我删减了很多内容,因此如果您发现代码中有什么奇怪的地方,请写一条评论) 如何通过添加一些代码来解决这个问题?或者我必须更改上面的所有代码吗?简单解决方案: 删除UIButton的子类,并将按钮的类还原为UIButton 在Interface Builder中,将

**我英语说得不好。请原谅我笨拙的英语

我正在使用复选框处理一个待办事项列表项目。我找不到将复选框的状态保存到核心数据的方法

这是我现在使用的代码的一部分
Tasks
是实体(类定义),它将
isMarked
标记为布尔属性。 (为了简单起见,我删减了很多内容,因此如果您发现代码中有什么奇怪的地方,请写一条评论)

如何通过添加一些代码来解决这个问题?或者我必须更改上面的所有代码吗?

简单解决方案:

  • 删除
    UIButton
    的子类,并将按钮的类还原为
    UIButton
  • 在Interface Builder中,将图像
    选中框
    取消选中框
    分配给状态
    选择的按钮
    默认值
    。根据按钮的
    isSelected
    属性,图像将自动显示。这样可以完全避免在代码中更新图像

  • CustomTableViewCell
    获得了属性
    task
    iAction
    ,该属性必须连接到按钮的
    内部触摸。必须将
    任务的属性
    isSelected
    更改为
    NSManagedObject

    class CustomTableViewCell: UITableViewCell {
    
        @IBOutlet weak var box: UIButton!
        @IBOutlet weak var taskLbl: UILabel!
    
        var task : Tasks! {
            didSet {
                box.isSelected = task.isSelected
                taskLbl.text = // update the label
            }
        }
    
        @IBAction func buttonClicked(_ sender: UIButton)
        {
            let selected = !sender.isSelected
            sender.isSelected = selected
            task.isSelected = selected
            // save the context if needed
        }
    
    }
    
  • cellForRowAt
    中,只需添加一行即可分配
    任务

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! CustomTableViewCell
        let task = toDolist[indexPath.row]
        cell.task = task
        return cell
    }
    

您必须(通过引用)将数据模型(任务实例)连接到按钮的状态和操作。最方便的方法是将
cellForRow
中的
Task
实例传递给自定义表视图单元格。由于引用语义的原因,任何更改都将持续,您只需保存托管对象上下文。实际上,子类化
UIButton
太过分了。@vadian我删除了“UIButton”子类化,但如何将“cellForRow”(您是指“cellForRowAt”)中的“Tasks”实例传递给自定义tableview单元格?你的意思是我必须选择手动/无而不是类定义吗?很抱歉,我只是一个编程和英语初学者….•添加属性
var task:Tasks并在单元格中添加一行
cell.task=task
。现在,您已将数据源项移交给单元格。•将
didSet
观察者添加到
task
以将
isChecked
设置为当前值在单元格中添加一个
iAction
,以接收触摸并将其连接到Interface Builder中在已选中的操作切换中,更新任务中的图像和属性保存上下文。“在单元格中添加“iAction”表示将其添加到func“cellForRowAt”中?我无法做到这一点,我试图在func cellForRowAt中添加target框,但也无法使其正常工作。或者我应该在单元格上添加一个新的透明操作按钮来执行此操作?很抱歉这些连续的基本问题。不,在单元格中意味着在
CustomTableViewCell
类中(按钮所属的位置)。实际上,实体
任务
标记为其属性,但除此之外,它工作得非常好!非常感谢。(对不起,我不能投这个票,因为我似乎缺乏足够的声誉或类似的东西。)
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! CustomTableViewCell
    let task = toDolist[indexPath.row]
    cell.task = task
    return cell
}