2015-12-18 130 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

相關問題