ios - MasterViewController更新时如何刷新DetailViewController

标签 ios swift uisplitviewcontroller

我有一个应用程序,用户可以在其中更新和添加任务。但是当用户更新任务时,我需要更新 DetailViewController enter image description here 中的详细信息

当用户更新任务并保存 MasterViewController 中的数据时,保存但 DetailViewController 中的数据保持不变
enter image description here

我该如何解决它,以便详细信息也得到更新

使用 添加和编辑任务添加项目 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/

相关文章:

ios - 获取 UITableView 的取消选择的 indexPaths 数组

ios - MPMediaItem 获取精确的文件大小

ios - Swift 协议(protocol)中 IBAction 的更好策略是什么?

swift - 如何覆盖初始 UIViewController 的特征集合? (带 Storyboard)

ios - UISplitViewController 扩展给应用带来了麻烦

ios - 登录屏幕后显示侧面菜单

objective-c - iOS : I can't find my file?

ios - 在 IBDesignable View 中重写以便它显示在 Interface Builder 中的正确方法是什么?

Swift 2.0 Realm 库未加载

ios - 来自 XCode 6 模板的 UISplitViewController 在 iPhone 5 iOS 7.1 中尺寸更小