Swift Coredata-更新信息

Swift Coredata-更新信息,swift,core-data,swift3,xcode8,Swift,Core Data,Swift3,Xcode8,我有两个视图控制器。 VC1是主视图控制器。 在VC2中,我有文本字段,以便用户输入结果和保存数据的保存按钮。 奇怪的是,当我保存时,我有一个fetchrequest来显示新数据,但是。。。发生的事情是,旧数据正在向我展示 但如果我去VC1,新的数据就在那里 这是我的代码(VC2): @IBOutlet var设计标签:UITextField! @IBOutlet var localLabel:UITextField! @IBOutlet var类型标签:UITextField! 重写func

我有两个视图控制器。 VC1是主视图控制器。 在VC2中,我有文本字段,以便用户输入结果和保存数据的保存按钮。 奇怪的是,当我保存时,我有一个fetchrequest来显示新数据,但是。。。发生的事情是,旧数据正在向我展示

但如果我去VC1,新的数据就在那里

这是我的代码(VC2):

@IBOutlet var设计标签:UITextField!
@IBOutlet var localLabel:UITextField!
@IBOutlet var类型标签:UITextField!
重写func viewDidLoad(){
super.viewDidLoad()
let fetchRequest:NSFetchRequest=Land.fetchRequest()
fetchRequest.predicate=NSPredicate(格式:“id=%@”,“\(choosenArmID!)”)
做{
让searchResults=尝试DatabaseController.getContext().fetch(fetchRequest)
搜索结果中的结果为[Arm]{
//在coredata中获取结果并将其放入文本字段:for edition
self.title=结果.designation
designLabel.text=结果.designation
localLabel.text=result.local
typeLabel.text=result.type
}
}
抓住{
打印(“错误:\(错误)”)
}
}
对于“保存”按钮,我有以下内容:

@IBAction func saveButton(_ sender: UIBarButtonItem) {

    let app = UIApplication.shared.delegate as! AppDelegate
    let context = app.persistentContainer.viewContext
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Arm")
    request.predicate = NSPredicate(format: "id = %@",  "\(choosenArmID!)")        
    do {
        let results = try context.fetch(request)

        if results.count > 0 {

            for result in results as! [NSManagedObject] {

                    result.setValue(designLabel.text, forKey: "designation")
                    result.setValue(typeLabel.text, forKey: "type")
                    result.setValue(localLabel.text, forKey: "local")

                do {
                    try context.save()
                    print("context saved") //I get into this
                } catch {
                    print("Error updating")
                }   
            }
        }
    } catch {

        print ("Error")
    }


 //I do another fetchrequest to show new results

    let fetchRequest:NSFetchRequest<Arm> = Arm.fetchRequest()
    fetchRequest.predicate = NSPredicate(format: "id = %@",  "\(choosenArmID!)")

    do{
        let searchResults = try DatabaseController.getContext().fetch(fetchRequest)

        for result in searchResults as [Arm]{
            print("New saved Results: ")
            print("title: \(result.designation!)")
            print("local: \(result.local!)")
            print("type: \(result.type!)")
        }
    }
    catch{
        print("Error: \(error)")
    }

}
@IBAction func saveButton(uu发送方:UIBarButtonItem){
将app=UIApplication.shared.delegate设为!AppDelegate
让context=app.persistentContainer.viewContext
let request=NSFetchRequest(entityName:“Arm”)
request.predicate=NSPredicate(格式:“id=%@”,“\(choosenArmID!)”)
做{
let results=try context.fetch(请求)
如果results.count>0{
对于结果,结果为![NSManagedObject]{
结果.设置值(designLabel.text,forKey:“指定”)
result.setValue(typeLabel.text,forKey:“type”)
result.setValue(localLabel.text,forKey:“local”)
做{
尝试context.save()
打印(“保存了上下文”)//我进入了这个
}抓住{
打印(“错误更新”)
}   
}
}
}抓住{
打印(“错误”)
}
//我执行另一个fetchrequest以显示新结果
let fetchRequest:NSFetchRequest=Arm.fetchRequest()
fetchRequest.predicate=NSPredicate(格式:“id=%@”,“\(choosenArmID!)”)
做{
让searchResults=尝试DatabaseController.getContext().fetch(fetchRequest)
搜索结果中的结果为[Arm]{
打印(“新保存的结果:”)
打印(“标题:\(结果名称!)”)
打印(“本地:\(result.local!))
打印(“类型:\(结果.类型!)”)
}
}
抓住{
打印(“错误:\(错误)”)
}
}
现在在新结果中,我期望新保存的结果,但我得到的是旧结果,即使新结果已保存!!!
您能帮我吗?

您确定数据正在保存吗?如果你搜索它,你能在数据库中找到它吗?另外,检查以确保你的模型的属性标记为动态-这让我绊倒了好几次。Bolnad,当我转到vc1时,数据显示正常。Erik,我在哪里可以检查模型属性是否设置为动态?@Erik你能告诉我如何标记这些属性具有动态吗?请确认正在保存数据吗?如果你搜索它,你能在数据库中找到它吗?另外,检查以确保你的模型的属性标记为动态-这让我绊倒了好几次。Bolnad,当我转到vc1时,数据显示正常。Erik,我在哪里可以检查模型属性是否设置为动态?@Erik你能告诉我如何标记这些属性具有动态吗?请
@IBAction func saveButton(_ sender: UIBarButtonItem) {

    let app = UIApplication.shared.delegate as! AppDelegate
    let context = app.persistentContainer.viewContext
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Arm")
    request.predicate = NSPredicate(format: "id = %@",  "\(choosenArmID!)")        
    do {
        let results = try context.fetch(request)

        if results.count > 0 {

            for result in results as! [NSManagedObject] {

                    result.setValue(designLabel.text, forKey: "designation")
                    result.setValue(typeLabel.text, forKey: "type")
                    result.setValue(localLabel.text, forKey: "local")

                do {
                    try context.save()
                    print("context saved") //I get into this
                } catch {
                    print("Error updating")
                }   
            }
        }
    } catch {

        print ("Error")
    }


 //I do another fetchrequest to show new results

    let fetchRequest:NSFetchRequest<Arm> = Arm.fetchRequest()
    fetchRequest.predicate = NSPredicate(format: "id = %@",  "\(choosenArmID!)")

    do{
        let searchResults = try DatabaseController.getContext().fetch(fetchRequest)

        for result in searchResults as [Arm]{
            print("New saved Results: ")
            print("title: \(result.designation!)")
            print("local: \(result.local!)")
            print("type: \(result.type!)")
        }
    }
    catch{
        print("Error: \(error)")
    }

}