单击导航栏按钮返回上一个视图控制器时,如何维护阵列内容



我有两个视图控制器A&B.

在ViewController B中,我有一个按钮,通过点击将项目添加到数组中

var list = [Items]()
@IBAction func addButton(_ sender: UIButton) {
let indexPath = IndexPath(row: sender.tag, section: tagPassedOver)

list.append(Items(category: "Toys", name: toys[indexPath.row], price: toysPrice[indexPath.row]))

}

ViewController A

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if self.isMovingFromParent {

// how do i send the data back in here??
}
}

问题:当我点击视图控制器B的导航栏中的后退按钮转到视图控制器A时;列表";数组已重置。因此,我以前的元素不再存储在数组中,如果我单击视图控制器B中的按钮,它将创建一个全新的数组。我在这里找到了一些帮助,但我不知道if语句中插入了什么。或者有没有一种方法可以用segues做到这一点?我只需要知道如何向后发送数据(Lmk,如果你需要更多的澄清,我必须简化我的代码才能得到这个特定问题的答案(

目标:能够在视图之间来回切换,并保留我的阵列的内容

实现这一点的一种方法是使ViewController A成为ViewController B的委托。如果您不熟悉委托,您只需要定义一个协议来声明委托(ViewContollerA(应该处理的任务,然后向"B"添加一个变量来存储委托。'"A"需要声明与委托协议的一致性并实现它。然后"B"需要做的就是在需要时调用它。

视图控制器A:

class ViewControllerA: UIViewController, DataCollectorViewControllerDelegate {

func showViewControllerB() {
viewControllerB.delegate = self
viewControllerB.list = dataArray
//Do stuff to show ViewControllerB
}

//Will get called when ViewControllerB exits
func dataViewControllerWillExitWithData(_ dataArray: [MyDataType]){
//Do something with dataArray
}
} 

In-ViewControllerB:

protocol DataCollectorViewControllerDelegate: AnyObject {
func dataViewControllerWillExitWithData(_ dataArray: [MyDataType])
}
class ViewControllerB: UIViewController {

weak var delegate: DataCollectorViewControllerDelegate?
var list = [Items]()

func exit() {
self.delegate?.dataViewControllerWillExitWithData(list)
//Do what you need to exit
}
}

有关委派模式的更多信息:委派

其他需要考虑的事项:

B是否需要存储数据?也许B可以向代表(A(报告所做的选择,并让A拥有数据。