如何将复选框的状态保存到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
}