首页 > 解决方案 > 尝试在主从视图中获取和更新特定的核心数据实体

问题描述

我正在尝试获取列表中某个项目的特定实例,但我不记得这样做的最佳方法。这是在主从列表的详细视图中,当文本更改结束时,它会更新主列表中的项目。但是,我似乎无法让它更新正确的项目,我知道它位于我的代码的这一部分:

guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
                    return
                }
                let context = appDelegate.persistentContainer.viewContext

                let fetchRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "Event")

                do {

                    let test = try context.fetch(fetchRequest)
                    let objectUpdate = test[0] as! NSManagedObject
                    objectUpdate.setValue(noteText.text, forKey: "title")
                    do {
                        try context.save()
                    }
                } catch {
                    let nserror = error as NSError
                    fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
                }

具体这部分:

let test = try context.fetch(fetchRequest)
                        let objectUpdate = test[0] as! NSManagedObject
                        objectUpdate.setValue(noteText.text, forKey: "title")

编辑:

我忘记发布问题了!基本上使用这种当前方法,当我在文本字段中输入完成时(这包含在一个textFieldDidEndEditing函数中),它会保存,但在主表视图中的最低项目。我希望它更新选择的项目。

由于我试图从 tableview 中获取项目并更新它,所以最好的方法是什么?我假设我需要识别正确的项目,但我不确定最好的方法。

标签: iosswiftxcodeipadcore-data

解决方案


我最终修复了它,我调用了 coredata 对象作为变量,然后通过 segue 传递它。然后我需要做的就是做selectedNote?.title = noteText.text

这是完整的完整代码:

var selectedEvent: Event? = nil

@IBAction func textFieldEndEdit(_ sender: Any) {
        print("edit end")
        
          guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
                    return
                }
                let context = appDelegate.persistentContainer.viewContext

                
                do {

                    
                    selectedEvent?.title = noteText.text
                    
                    do {
                        try context.save()
                    }
                    
                } catch {
                    let nserror = error as NSError
                    fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
                }
        
    }

推荐阅读