如何将编辑后的账户数据保存至Core Data
解决Core Data中编辑账户数据的保存问题
哈哈,恭喜你已经搞定了数据查询的环节!针对你要把编辑后的账户信息存回Core Data的需求,其实思路和你创建新账户时差不多,不用搞复杂的替换操作,直接修改已有的托管对象就行,具体实现步骤如下:
1. 把选中的账户对象传递到编辑页面
首先在你的TableView所在的ViewController里,实现didSelectRowAt方法,把用户选中的Account实例传递给编辑页面:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // 假设yourAccountsArray是你存储Core Data查询结果的数组 let selectedAccount = yourAccountsArray[indexPath.row] // 实例化编辑页面ViewController guard let editVC = storyboard?.instantiateViewController(withIdentifier: "EditAccountVC") as? EditAccountViewController else { return } // 传递选中的账户对象 editVC.currentAccount = selectedAccount navigationController?.pushViewController(editVC, animated: true) }
2. 编辑页面接收对象并实现保存逻辑
在你的编辑页面ViewController里,先定义一个接收账户对象的属性,然后在保存按钮的方法里直接修改该对象的属性,最后调用Core Data的保存方法:
class EditAccountViewController: UIViewController { // 定义属性接收传递过来的原有账户对象 var currentAccount: Account! // 获取Core Data上下文(和你创建新账户时的方式一致) let dataContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext // 你的文本框IBOutlet(和创建页面一致) @IBOutlet weak var nameuser: UITextField! @IBOutlet weak var username: UITextField! @IBOutlet weak var password: UITextField! override func viewDidLoad() { super.viewDidLoad() // 加载原有数据到文本框(你已经实现这部分,这里再确认一下) nameuser.text = currentAccount.name username.text = currentAccount.username password.text = currentAccount.password } @IBAction func saveEditedAccount(_ sender: UIBarButtonItem) { // 直接修改现有Account对象的属性 currentAccount.name = nameuser.text currentAccount.username = username.text currentAccount.password = password.text // 调用保存上下文的方法,和创建新账户时完全一致 (UIApplication.shared.delegate as! AppDelegate).saveContext() // 保存完成后返回列表页面,记得刷新TableView展示更新后的数据 navigationController?.popViewController(animated: true) } }
为什么这样可行?
因为currentAccount是Core Data托管对象上下文(viewContext)中的实例,你对它属性的修改会被上下文追踪,调用saveContext()时,Core Data会自动把这些变更持久化到本地存储,不需要额外的查询或者删除再创建的操作,非常简洁。
内容的提问来源于stack exchange,提问作者user9815047
相关产品推荐
相关产品推荐

