2016-08-12 7 views
2

Ich habe eine TabBar mit einer Ansicht vom Typ UIViewController. In dieser Ansicht habe ich zwei Container hinzugefügt (einen für bevorstehende Lieferungen und einen für abgeschlossene Lieferungen). Jeder dieser beiden Container ist mit UITableViewController verbunden, um Tabellen relevanter Aufträge anzuzeigen. Um auf die Container zuzugreifen, habe ich eine segmentierte Kontrolle.Swift - Daten vom Container an TableViewController mit Segue übergeben

Ich bin bisher nicht in der Lage mit allen Versuchen basierend auf Code herum und Ansätze, Daten vom Viewcontroller an den Tableviewcontroller übergeben. Fehle ich etwas?

Hier ist der Code, den ich im View-Controller habe:

@IBOutlet weak var ordersSegementedControl: UISegmentedControl! 
@IBOutlet weak var upcomingDeliveriesContainer: UIView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     SwiftLoader.show(title: "Retrieving Orders...", animated: true) 
     let currentUser = FIRAuth.auth()?.currentUser 
     ref.child("ordersSummary").queryOrderedByChild("userId").queryEqualToValue("\(currentUser!.uid)").queryLimitedToLast(15).observeEventType(.ChildAdded, withBlock: { (snapshot) in 

      if(snapshot.value!["orderStatus"] as? String != "In Progress" || snapshot.value!["orderStatus"] as? String != "Pending") 
      { 
       let tempOrderObject = OrderObject() 
       //let properDate: UnixTime = snapshot.value!["dueDate"] as! Int 
       tempOrderObject.dueDateInt = snapshot.value!["dueDate"] as? Int 
       let properDate: UnixTime = snapshot.value!["dueDate"] as! Int 
       tempOrderObject.dueDate = properDate.toDay 
       tempOrderObject.referenceNumber = snapshot.value!["orderReference"] as? String 
       tempOrderObject.status = snapshot.value!["orderStatus"] as? String 
       tempOrderObject.userId = snapshot.value!["userId"] as? String 
       tempOrderObject.sender = snapshot.value!["sender"] as? String 
       self.ordersObjectsArrray.append(tempOrderObject) 
       self.ordersObjectsArrray.sortInPlace({ $0.dueDate > $1.dueDate }) 
       SwiftLoader.hide() 
      } 

     }){ (error) in 
      SwiftLoader.hide() 
      print(error.localizedDescription) 
     } 

    } 



    @IBAction func showComponent(sender: UISegmentedControl) { 
     if sender.selectedSegmentIndex == 0 { 
      UIView.animateWithDuration(0.5, animations: { 
       self.upcomingDeliveriesContainer.alpha = 1 
      }) 
     } else { 
      UIView.animateWithDuration(0.5, animations: { 
       self.upcomingDeliveriesContainer.alpha = 1 
      }) 
     } 
    } 


    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 

     if(segue.identifier == "upcomingDeliveriesSegue") 
     { 
      let destinationVC = segue.destinationViewController as! UpcomingDeliveriesTableViewController 
      destinationVC.ordersObjectsArrray = self.ordersObjectsArrray 

     } 
    } 

ich im UpcomingDeliveriesTableViewController folgenden dann habe:

class UpcomingDeliveriesTableViewController : UITableViewController { 

    let ref = FIRDatabase.database().reference() 
    var ordersObjectsArrray:[OrderObject]? 
    let orderToPass = OrderObject() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     print("Array Count: \(self.ordersObjectsArrray!.count)") 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    // MARK: - Table view data source 

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     // #warning Incomplete implementation, return the number of sections 
     return 1 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     // #warning Incomplete implementation, return the number of rows 
     return ordersObjectsArrray!.count 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     // Configure the cell... 
     let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UpcomingDeliveriesTableViewCell 

     let orderEntry = self.ordersObjectsArrray![indexPath.row] 
     cell.dueDateLabel.text = String(orderEntry.dueDate) 
     cell.orderNoLabel.text = orderEntry.referenceNumber 
     cell.statusLabel.text = orderEntry.status 
     cell.senderLabel.text = orderEntry.sender 

     return cell 
    } 



} 

die print-Anweisung in dem UpcomingDeliveriesTableVieController Druck 0 als Anzahl der Array Artikel. Bis jetzt wird nicht weitergegeben.

Dies ist schließlich der Storyboard-Snapshot:

the embed segue is called: upcomingDeliveriesSegue

Danke

+0

Überprüfen Sie, ob Sie ordersObjectsArrray in UpcomingDeliveriesTableVieController sind Neuinitialisierung ?? –

+0

Ich mache das: var ordersObjectsArrray = [OrderObject]() @VishalSonawane –

+0

@VishalSonawane Sorry hat nicht bekommen, dass –

Antwort

1

In prepareForSegue speichern nur Instanz UpcomingDeliveriesTableViewController, aber ordersObjectsArrray nur gesetzt, wenn Sie es.

Ex:

im View-Controller:

var tvc: UpcomingDeliveriesTableViewController! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    SwiftLoader.show(title: "Retrieving Orders...", animated: true) 
    let currentUser = FIRAuth.auth()?.currentUser 
    ref.child("ordersSummary").queryOrderedByChild("userId").queryEqualToValue("\(currentUser!.uid)").queryLimitedToLast(15).observeEventType(.ChildAdded, withBlock: { (snapshot) in 

     if(snapshot.value!["orderStatus"] as? String != "In Progress" || snapshot.value!["orderStatus"] as? String != "Pending") 
     { 
      let tempOrderObject = OrderObject() 
      //let properDate: UnixTime = snapshot.value!["dueDate"] as! Int 
      tempOrderObject.dueDateInt = snapshot.value!["dueDate"] as? Int 
      let properDate: UnixTime = snapshot.value!["dueDate"] as! Int 
      tempOrderObject.dueDate = properDate.toDay 
      tempOrderObject.referenceNumber = snapshot.value!["orderReference"] as? String 
      tempOrderObject.status = snapshot.value!["orderStatus"] as? String 
      tempOrderObject.userId = snapshot.value!["userId"] as? String 
      tempOrderObject.sender = snapshot.value!["sender"] as? String 
      self.ordersObjectsArrray.append(tempOrderObject) 
      self.ordersObjectsArrray.sortInPlace({ $0.dueDate > $1.dueDate }) 
      SwiftLoader.hide() 
     } 

    tvc.ordersObjectsArrray = self.ordersObjectsArrray 

    }){ (error) in 
     SwiftLoader.hide() 
     print(error.localizedDescription) 
    } 

} 


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 

    if(segue.identifier == "upcomingDeliveriesSegue") 
    { 
     tvc = segue.destinationViewController as! UpcomingDeliveriesTableViewController 
    } 
} 
+0

Nicht vollständig zu verstehen, was Sie sagen Igor –

+0

'PrepareForSegue' früh ausgeführt, dann erhalten Sie' self.OrdersObjectsArrray' in 'observeEventType', verstehen Sie? – Igor

+0

und in der prepareForSegue oben, erstellen wir eine neue Variable tvc was dann? Wie übertrage ich es zur nächsten Ansicht? –

Verwandte Themen