我将CoreData添加到了我的Notes应用程序。它可以保存数据,删除数据等。现在,我不得不编辑已经存在的注释。
好吧,我试图删除上一个项目并保存新项目,但是现在我要如何在tableView中进行操作,在这里您可以“ notes.remove(at:indexPath.row)”,但我不知道该怎么做在另一个vieController中。另外,我试图用“已过滤”的对象删除对象,但两者都不起作用
此函数从CoreData加载注释:
func getNotes(with request: NSFetchRequest<Note> = Note.fetchRequest()) {
do {
notes = try Constants.context.fetch(request)
} catch {
print("Loading error \(error)")
}
tableView.reloadData()
}
此保存它:
func saveNote() {
do {
try Constants.context.save()
} catch {
print(error.localizedDescription)
}
}
我正在尝试添加编辑功能:
func editNote() {
let editedNote = Note(context: Constants.context)
editedNote.text = noteDetailOutlet.text
dataManager.saveNote()
navigationController?.popViewController(animated: true)
callback?()
}
这是我对vc执行segue所做的更改:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let vc = storyboard?.instantiateViewController(withIdentifier: "NoteDetailsViewController") as! NoteDetailsViewController
let note = notes[indexPath.row]
vc.passedNote = note.text ?? "Empty note"
vc.callback = { [weak self] in
if Constants.context.hasChanges {
self?.notes.remove(at: indexPath.row)
}
self?.getNotes()
}
Constants.context.hasChanges无法正常工作
答案 0 :(得分:0)
核心数据对象位于内存图中,因此当您编辑对象的某些属性并保存上下文时,该对象已被编辑。
一个很好的解决方案是将所有表的对象放在核心数据堆栈中。 您可以在其他控制器中编辑对象,并订阅上下文的contextWillSave通知。 这样,当您从其他ViewController编辑并保存一个注释时,运行表将通知并刷新数据。
这是您订阅上下文将保存通知的方式
Jim
这就是您的通知功能的工作方式
NotificationCenter.default.addObserver(self, selector: #selector(managedObjectContextWillSave), name: Notification.Name.NSManagedObjectContextWillSave, object: Constants.context)