我有一个应用程序,用户可以在其中更新和添加任务。但是当用户更新任务时,我需要更新 DetailViewController 中的详细信息
当用户更新任务并保存 MasterViewController 中的数据时,保存但 DetailViewController 中的数据保持不变
我该如何解决它,以便详细信息也得到更新
使用 添加和编辑任务添加项目 Controller
我尝试了以下方法,但如果它们都没有,都导致应用程序崩溃
let vc = DetailViewController()
let row = vc.view.layoutIfNeeded();
//Second method
let vc = MasterViewController()
vc.performSegue(withIdentifier: "showDetail", sender: vc.self)
数据在 DetailViewController 中使用
override func viewDidLoad() {
super.viewDidLoad()
table.delegate = self
table.dataSource = self
lblName.text = detail.name ?? ""
lblCode.text = detail.code ?? ""
}
主视图 Controller
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDetail" {
if let indexPath = tableView.indexPathForSelectedRow {
let object = fetchedResultsController.object(at: indexPath)
let controller = (segue.destination as! UINavigationController).topViewController as! DetailViewController
controller.details = object;
controller.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem
controller.navigationItem.leftItemsSupplementBackButton = true
detailViewController = controller
}
}
}
编辑 View Controller
func editEvents(_ sender: Any){
let fetchRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: "Proj")
do {
let test = try context.fetch(fetchRequest)
var objectUpdate = test[0] as! Assesment;
objectUpdate.name = txtname.text ?? ""
objectUpdate.code = txtCode.text ?? "";
do {
try context.save()
}
catch {
print(error)
}
}
catch {
print(error)
}
}
我想在 editEvent 函数完成执行后更新详细信息
无论如何我可以让它工作吗?
最佳答案
如果您正在使用 coreData .. 您可以详细实现 FRC .. 这样您每次在回调中都会获得刷新的数据...
在您的 MasterViewController
定义一个变量
这是另一种解决方法
private var controller : DetailViewController? = nil
然后在你的 Segue 方法中使用这个 Controller
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDetail" {
if let indexPath = tableView.indexPathForSelectedRow {
let object = fetchedResultsController.object(at: indexPath)
self.controller = (segue.destination as! UINavigationController).topViewController as! DetailViewController // here you set your instence variable controller
controller.details = object;
controller.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem
controller.navigationItem.leftItemsSupplementBackButton = true
detailViewController = controller
}
}
}
func editEvents(_ sender: Any){
let fetchRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: "Proj")
do {
let test = try context.fetch(fetchRequest)
var objectUpdate = test[0] as! Assesment;
objectUpdate.name = txtname.text ?? ""
objectUpdate.code = txtCode.text ?? "";
do {
try context.save()
if let detailsCotrollerExists = controller {
detailsCotrollerExists.updateDataWithObject(objectUpdate) // function you will write in detail class which takes object and refresh data there .. Either outlets or Table/Collection View reload
}
}
catch {
print(error)
}
}
catch {
print(error)
}
}
然后你在
DetailViewController
中写一个函数func updateDataWithObject(_ obj: Assesment)
您将在详细类中编写函数,该类在该类中获取对象并刷新数据.. 导出或表/ Collection View 重新加载在
DetailViewController
中写入函数func updateDataWithObject(_ obj: Assesment) {
// Refresh data
}
关于ios - MasterViewController更新时如何刷新DetailViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61796663/