更新Viewcontrollers中的导航 - Coredats

时间:2016-11-24 11:25:40

标签: swift core-data uiviewcontroller swift3

我是一名使用Swift的新程序员。 在我的项目中,我使用的是coredata和许多视图控制器。

我有这个视图控制器:

Viewcontroller1有我的家庭Viewcontroller(VC1)。 Viewcontroller2(VC2),带有从我的coredata重新加载的项目列表(在表格视图中)。 Viewcontroller2(VC3)列出了VC2中所选项目的属性。 Viewcontroller2(VC4),使用户可以在VC2中编辑所选项目的属性。

这是我的导航:VC1 - > VC2 - > VC3 - > VC4。

问题: 让我们说我在VC1并转到VC2。 我现在从视图控制器中选择一个项目,它将我带到VC3(我推VC3)。 我现在处于项目特征。从coredata列出的。 为了编辑它们,我创建了一个带有segue,VC4的按钮,在那里我创建了一个视图,用户可以在其中更改所选项目的值。一旦用户在文本字段中引入了任何更改,我就会执行NSFetchRequest,并更新这样的值:

@IBAction func saveButton(_ sender: UIBarButtonItem) {

    let app = UIApplication.shared.delegate as! AppDelegate
    let context = app.persistentContainer.viewContext
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Simulator")

    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()
                } catch {
                    print("Error updating")
                }


            }
        }
    } catch {

        print ("Error")
    }
    _ = self.navigationController?.popViewController(animated: true)

}

现在,通过按saveButton我更新本地,指定和类型属性,然后再弹出VC3。 现在在VC3中我希望收到更新值。相反,我收到旧的价值观。这就是我在VC3中所拥有的:

 override func viewWillAppear(_ animated: Bool) {

    super.viewDidAppear(animated)

    map.delegate = self

    let fetchRequest:NSFetchRequest<Simulator> = Simulator.fetchRequest()

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

        for result in searchResults as [Simulator]{

            if (String(describing: result.objectID) == choosenID)
            {
                self.title = result.designation
                localLabel.text = "Local: \(result.local!)"
                typeLabel.text =  "Type: \(result.type!)
                print("I found it") //to check if I go inside this = and I go inside (true)

            {
        }
    }
    catch{
        print("Error: \(error)")
    }

   }      
}

现在我按下后退按钮,我转到VC2:有些事情。在标签上具有标识的单元格仍然不更新它。 所以我去VC吧!使用后退按钮。 现在,如果我继续前进到VC2或VC3,一切都会更新。

发生了什么事?当我从VC4弹出到VC3时,为什么不更新?

1 个答案:

答案 0 :(得分:1)

当你回去时,你会回到原来的视野,当你前进时,你正在重新加载它。你可以做的是在你回去时重新加载数据。

相关问题