Swift 有没有一种方法可以通过按bar按钮项来更新核心数据模型中的对象?

Swift 有没有一种方法可以通过按bar按钮项来更新核心数据模型中的对象?,swift,core-data,uinavigationbar,crud,nsmanagedobject,Swift,Core Data,Uinavigationbar,Crud,Nsmanagedobject,我的目标是在编辑文本后按done按钮更新核心数据中的对象 “完成”按钮和下面的文本字段: 这是我的一些代码 @objc func donetaped(){ 做{ 尝试context.save() }抓住{ 打印(“保存新信息时出错\(错误)”) } dateEditableTextF.resignFirstResponder() selectedEventDate=dateEditableTextF.text dateEditableTextF.isEnabled=false costEdit

我的目标是在编辑文本后按done按钮更新核心数据中的对象

“完成”按钮和下面的文本字段:

这是我的一些代码

@objc func donetaped(){
做{
尝试context.save()
}抓住{
打印(“保存新信息时出错\(错误)”)
}
dateEditableTextF.resignFirstResponder()
selectedEventDate=dateEditableTextF.text
dateEditableTextF.isEnabled=false
costEditableTextF.辞职FirstResponder()
selectedEventCost=成本可编辑文本f.text
costEditableTextF.isEnabled=false
gradesEditableTextF.resignFirstResponder()
选择EdEventGrade=gradesEditableTextF.text
gradesEditableTextF.isEnabled=false
navigationItem.rightBarButtonItem=UIBarButtonItem(barButtonSystemItem:.edit,target:self,action:#选择器(editTapped))
}
我希望当我在编辑文本字段后运行应用程序时按下“完成”按钮时,信息会更新,当我返回视图控制器时,信息会相同,并且我的核心数据数据库会使用该对象的更新属性进行更新

实际发生的情况是,当我完成编辑文本字段时,视图控制器中的数据会更新,但当我离开视图控制器并返回到它时,数据会恢复为旧条目

我在youtube上观看了大约4个crud方法的视频,它们都是不同的场景,与我的不匹配,所以我希望这里的人能帮上忙。提前谢谢

这是我的视图控制器的其余部分

@IBOutlet弱var costEditableTextF:UITextField!
@IBOutlet弱var dateEditableTextF:UITextField!
@IBOutlet弱var等级可编辑文本F:UITextField!
让上下文=(UIApplication.shared.delegate为!AppDelegate)。persistentContainer.viewContext
var updateTheEvents=[Event]()
var selectedEventName:字符串?
变量selectedEventDate:字符串?
var selectedEventCost:字符串?
var selectedEventGrade:字符串?
重写func viewDidLoad(){
super.viewDidLoad()
navigationItem.title=selectedEventName
navigationItem.rightBarButtonItem=UIBarButtonItem(barButtonSystemItem:.edit,target:self,action:#选择器(editTapped))
如果让dateToLoad=选择DeventDate{
dateEditableTextF.text=已选择日期日期
}
如果让costToLoad=选择了EventCost{
costEditableTextF.text=已选择的事件成本
}
如果让gradesToLoad=选择了eventgrade{
gradesEditableTextF.text=已选择EventGrade
}
//加载视图后执行任何其他设置。
}
@objc func edittap(){
dateEditableTextF.becomeFirstResponder()
dateEditableTextF.isEnabled=true
costEditableTextF.isEnabled=true
gradesEditableTextF.isEnabled=true
navigationItem.rightBarButtonItem=UIBarButtonItem(barButtonSystemItem:.done,target:self,action:#选择器(DoneTaped))
}

首先,您需要创建一个存储来管理persistentContainer和CRUD操作:

类持久性管理器{
lazy var persistentContainer:NSPersistentContainer={
让container=NSPersistentContainer(名称:“your\u xcdatamodeld\u name”)//在这里,您应该键入xcdatamodeld文件的名称,但不带扩展名.xcdatamodeld
中的container.loadPersistentStores(completionHandler:{(storeDescription,错误)
如果let error=错误为N错误{
fatalError(“未解决的错误\(error),\(error.userInfo)”)
}
})
container.viewContext.automaticallyMergesChangesFromParent=true
container.viewContext.mergePolicy=NSMergeByPropertyStoreTranpMergePolicy
返回容器
}()
}
现在要保存数据,您需要一个上下文。我强烈建议你使用一个全球性的。我在从外部函数访问存储上下文时遇到了几个问题(例如,没有添加/编辑内容)。请注意,尽管它对我很有用,但我不确定全球环境是否是最佳实践。然而,我遇到了任何问题

在您的
PersistenceManager
类中,在persistentcainer放入以下代码之前

static let shared=PersistenceManager()
var managedObjectContext:NSManagedObjectContext{
persistentContainer.viewContext
}
并且,在课前和课外放以下内容

let context=PersistenceManager.shared.managedObjectContext
...
类PersistenceManager{[…]}
现在,您必须创建如下保存功能:

func saveContext(){
如果context.has发生更改{
做{
尝试context.save()
}抓住{
设nserror=错误为nserror
fatalError(“未解决的错误\(nserror),\(nserror.userInfo)”)
}
}
这进入了
PersistenceManager
类的内部

现在是有趣的部分:您必须创建CRUD函数。这些函数都将在PersistenceManager类中。我将向您展示一个关于创建和编辑实体的小演示

假设您有一个名为“Item”的实体,它具有属性name和price。
要保存每个项目,您将具有如下函数:

func creaateNewItem(名称:String,价格:Int)->Item{
让entity=NSEntityDescription.entity(forEntityName:Item,in:context)
让newItem=Item(entity:entity!,insertInto:context)
newItem.name=名称
newItem.price=价格
self.saveContext()
返回新项目
}
T