我是一个使用Swift的新程序员。 在我的项目中,我正在使用coredata和许多视图控制器。在Viewcontrollers更新导航 - Coredats
我有这样的视图控制器:
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我更新本地,名称和类型atributes,而且比流行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时不更新?
当你回去时,你有没有尝试重新加载数据? – AMAN77
我想我知道为什么。我不更新数据,我应该... –