gpt4 book ai didi

swift - 如何防止 UIViewController 在 segues 期间重新实例化?

转载 作者:行者123 更新时间:2023-11-28 06:16:00 25 4
gpt4 key购买 nike

我在 UIViewController(我们称之为 View Controller B)中有一个 UITableView,我一次填充一个对象。这些对象是在之前的 UIViewController( View Controller A)中创建的,并在 View Controller A 的 prepare(for segue:_) 函数中添加到表的数据源(也是 View Controller B)。这会将那个对象添加到表,此时用户可以点击“添加到表”单元格,将它们带回 Controller A,然后重复该过程。问题是每次我返回 View Controller B, TableView 只有最近添加的对象。我相信这是因为每个 segue 都在创建它要移动到的 ViewController 的新实例。我怎样才能避免这种情况,或者找到一个更好的地方来存储 tableview 数据源,而不是每次都重新实例化并覆盖为空列表?

查看 Controller A

class ViewControllerA : UIViewController {

var object = MyObject(...)

...

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let viewB = segue.destination as! ViewControllerB


viewB.dataSource.append(object) //


}
}

View Controller B

class ViewControllerB: UIViewController, UITableViewDataSource, UITableViewDelegate {

var dataSource = [MyObject]()

//DataSource functions fill table with dataSource array objects
...
}

最佳答案

您丢失数据的原因是因为每次您尝试进行 segue 时都会重新创建 View Controller B。因此,为了保留数据,您必须将数据从 View Controller B 传递回 View Controller A。然后当您在 View Controller A 上单击其他内容时,您需要将新数据附加到现有数据,然后传递给 Controller ​​ B再次。

要传回数据,您需要查看 unwind segue。 Here是实现的一个很好的例子。

关于swift - 如何防止 UIViewController 在 segues 期间重新实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45121232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com