如何在其他VC中读取第一个VC中的数据集?

How to read data set in first VC in other VC?

我正在寻找一种方法来在另一个视图控制器中读取第一个视图控制器中的数据集

拳头VC我有

class ScannerViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, AVCaptureMetadataOutputObjectsDelegate {

    var scannedVisitors = [Visitor]()

.....
....
 override func viewDidLoad() {
        super.viewDidLoad()
        // test data, will be provided server side
        var visitor = Visitor(visitorName: "John", visitorCompany: "google", visitorPlace: "San", visitorPhone: "94888484", visitorEmail: "john@google.com")
        scannedVisitors += [visitor]

visitor = Visitor(visitorName: "Matt", visitorCompany: "apple", visitorPlace: "Tokyo", visitorPhone: "94888484", visitorEmail: "matt@apple.com")
        scannedVisitors += [visitor]

现在情节提要中的第一个视图显示已扫描的访问者

但在另一个 viewController/view 中,我想再次在 table 视图中列出所有 scannedVisitors,为此我有

class ListVisitorsVC: UIViewController, UITableViewDataSource, UITableViewDelegate {


    @IBOutlet weak var tableView: UITableView!

    var scannedVisitorsArr = [Visitor]()

    override func viewDidLoad() {
        super.viewDidLoad()
        // first try this, later use NSUserDefaults or Core Data 
        let firstVC = ScannerViewController()
        scannedVisitorsArr = firstVC.scannedVisitors
        print("Visitors \(scannedVisitorsArr)")

    }

但是 scannnedVisitorsArr 是空的???

1/ 如何修复空的 scannedVisitorsArr?我应该在我的第一个视图控制器中有一个单独的 populate scannedVisitors 函数吗??

2/ 使用NSUserDefaults有大小限制吗??

[编辑] 通过向第一个 VC

添加函数进行测试
    func readAndPopulateData(){
  var visitor = Visitor(visitorName: "John", visitorCompany: "google", visitorPlace: "San", visitorPhone: "94888484", visitorEmail: "john@google.com")
            scannedVisitors += [visitor]

    visitor = Visitor(visitorName: "Matt", visitorCompany: "apple", visitorPlace: "Tokyo", visitorPhone: "94888484", visitorEmail: "matt@apple.com")
            scannedVisitors += [visitor]
    }

override func viewDidLoad() {
        super.viewDidLoad()
self.readAndPopulateData()

现在在我的另一个VC

let firstVC = ScannerViewController()
        firstVC.readAndPopulateData()
        scannedVisitorsArr = firstVC.scannedVisitors

但这只是returns

Visitors [folder_name.Visitor, folder_name.Visitor]

而不是数据集?

[编辑] 阅读数据容器单例,因为它看起来可用于此。但是我阅读了不同的 pos/neg 个关于使用单例的故事?欢迎任何有关主题数据容器单例的提示。

你可以使用 prepareForSegue 方法

示例

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
    if (segue.identifier == "ToListVisitorsVC") {
      //Checking identifier is crucial as there might be multiple
      // segues attached to same view
      var detailVC = segue!.destinationViewController as ListVisitorsVC;
      detailVC.visitors = self.scannedVisitors
    }
}