我正在寻找一种方法来读取另一个视图控制器中第一个视图控制器中的数据集
在我的拳头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]
现在Storyboard中的第一个视图显示扫描的访问者
但在另一个视图Controller/view中,我喜欢再次在表视图中列出所有扫描的访问者,为此我有
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)")
}
但是扫描的VisitorsArr是空的???
1/如何修复空的扫描VisitorsArr?我应该在我的第一个视图控制器中有一个单独的填充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
但这只是返回
Visitors [folder_name.Visitor, folder_name.Visitor]
而不是数据集?
[编辑]读取数据容器singleton,因为它看起来可以用于此操作。但我读过不同的关于使用单身汉的正面/负面故事?欢迎任何关于主题数据容器singleton的提示。
您可以使用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
}
}