2015-12-18 87 views
0

我是一个寻找一种方式来读取数据中的第一个视图控制器在另一个视图控制器如何读取其他VC中第一个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: "[email protected]") 
     scannedVisitors += [visitor] 

visitor = Visitor(visitorName: "Matt", visitorCompany: "apple", visitorPlace: "Tokyo", visitorPhone: "94888484", visitorEmail: "[email protected]") 
     scannedVisitors += [visitor] 

现在首先视图显示scannedVisitors

但是在其他的viewController /视图我想再次列出一个表视图中的所有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?我应该在我的第一个视图控制器中有独立的填充scannedVisitors函数吗?

2 /使用NSUserDefaults时是否存在大小限制?

[编辑] 测试与添加的功能,第一个VC

func readAndPopulateData(){ 
    var visitor = Visitor(visitorName: "John", visitorCompany: "google", visitorPlace: "San", visitorPhone: "94888484", visitorEmail: "[email protected]") 
      scannedVisitors += [visitor] 

    visitor = Visitor(visitorName: "Matt", visitorCompany: "apple", visitorPlace: "Tokyo", visitorPhone: "94888484", visitorEmail: "[email protected]") 
      scannedVisitors += [visitor] 
    } 

override func viewDidLoad() { 
     super.viewDidLoad() 
self.readAndPopulateData() 
我在其他VC

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

,但现在这只是返回

Visitors [folder_name.Visitor, folder_name.Visitor] 

而不是数据集?

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

+0

不NSUserDefaults的使用用于此目的,这不是它是什么。要读取该数据集,可以将它传递给下一个VC,或者使用导航控制器viewcontrollers数组访问最后一个VC,从它们访问数据集 – NSNoob

+0

这是空的,因为ScannerViewController没有运行viewDidLoad方法。如果你在这里设置了断点,你会看到 –

+0

“当你继续下去时将它传递给你的下一个VC”,但在我的情况下,它是“秒”的继续。首先我有一个细节视图的segue,在这里我有一个按钮,它将转到表列表视图。 (=这不能与第一个VC相同,因为除了表视图以外,第一个VC拥有更多的UI元素)。 你可以给我一些下一代VC segue和导航控制器viewcontrollers数组的代码示例吗? – alex

回答

1

您可以使用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 
    } 
} 
+0

问题表详细视图?和self.scannedVisitors应该像firstVC.scannedVisitors,我觉得比 – alex

+0

你需要创建委托....在第一个VC申报的协议和实施也firstVC,并呼吁从那里你需要这个数组这个功能... –

+0

你能否提供一个简单的代码示例“创建委托和声明协议”部分? – alex

相关问题