如何编辑保存在CoreData中的文本?

时间:2019-05-13 14:49:34

标签: swift core-data

我将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无法正常工作

1 个答案:

答案 0 :(得分:0)

核心数据对象位于内存图中,因此当您编辑对象的某些属性并保存上下文时,该对象已被编辑。

一个很好的解决方案是将所有表的对象放在核心数据堆栈中。 您可以在其他控制器中编辑对象,并订阅上下文的contextWillSave通知。 这样,当您从其他ViewController编辑并保存一个注释时,运行表将通知并刷新数据。

这是您订阅上下文将保存通知的方式

Jim

这就是您的通知功能的工作方式

NotificationCenter.default.addObserver(self, selector: #selector(managedObjectContextWillSave), name: Notification.Name.NSManagedObjectContextWillSave, object: Constants.context)