2017-09-28 3 views
0

Ich habe Probleme, die Marke und das Modell der ausgewählten Zelle in einem anderen Ansichtscontroller anzuzeigen, der über ein Segment verbunden ist. Die Zellen zeigen die Vin-Nummer an und ich möchte, dass die Marken- und Modellinformationen für diese bestimmte Vin-Nummer an einen anderen ViewController übergeben werden. Ich habe versucht, die Werte zu übergeben, kann sie aber nicht zum Laufen bringen. Kann jemand einen Blick darauf werfen, ob er sieht, wo ich falsch gelaufen bin? HierWeitergabe von Firebase-Daten aus der Tabellenansicht an ViewController

ist, was meine Feuerbasis Datenbank wie folgt aussieht:

Vehicles: { 
5UXKR0C34H0X82785: { 
    VehicleInfo: { 
     make:"toyota", 
     model:"corolla", 
     VinNumber: "5UXKR0C34H0X82785" 
     } 
    } 
} 

Hier mein Fahrzeug Modellklasse ist

import Foundation 
import FirebaseDatabase 

struct VehicleModel { 
var Make: String? 
var Model: String? 
var VinNumber: String? 

init(Make: String?, Model: String?, VinNumber: String?){ 
    self.Make = Make 
    self.Model = Model 
    self.VinNumber = VinNumber 
} 

    init(snapshot: DataSnapshot) { 
    let snapshotValue = snapshot.value as! [String: AnyObject] 
    VinNumber = snapshotValue["VinNumber"] as? String 
    Make = snapshotValue["Make"] as? String 
    Model = snapshotValue["Model"] as? String 
    } 
} 

Hier ist meine Ansicht Controller-Code

import UIKit 
import Firebase 
import FirebaseDatabase 
class InventoryTableViewController: UITableViewController{ 


    var ref: DatabaseReference! 
    var refHandle: UInt! 
    var userList = [VehicleModel]() 

    let cellId = "cellId" 

    override func viewDidLoad() { 
    super.viewDidLoad() 

    ref = Database.database().reference() 

    tableView.delegate = self 
    tableView.dataSource = self 

    tableView?.register(UITableViewCell.self, forCellReuseIdentifier: 
    "cellId") 
    fetchUsers() 
} 

override func tableView(_ tableView: UITableView, numberOfRowsInSection 
section: Int) -> Int { 
    return userList.count 
} 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: 
IndexPath) -> UITableViewCell { 
    // Set cell contents 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: 
indexPath) as UITableViewCell 
    let eachvehicle = userList[indexPath.row] 
    cell.textLabel!.text = "\(String(describing: eachvehicle.VinNumber))" 
    return cell 
} 

func fetchUsers(){ 
      refHandle = ref.child("Vehicles").observe(.childAdded, with: { 
(snapshot) in 
      if let dictionary = snapshot.childSnapshot(forPath: 
"VehicleInfo").value as? [String: AnyObject] { 
      print(dictionary) 
      let VinNumber = dictionary["VinNumber"] 
      let Make = dictionary["Make"] 
      let Model = dictionary["Model"] 
      self.userList.insert(VehicleModel(Make: Make as? String, Model: 
Model as? String, VinNumber:   VinNumber as? String), at: 0) 
      self.tableView.reloadData()    
     } 
    }) 
    } 
} 

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: 
IndexPath) { 
    let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main) 
    let destination = storyboard.instantiateViewController(withIdentifier: 
"AdditionalInfoViewController") as! AdditionalInfoViewController 
    navigationController?.pushViewController(destination, animated: true) 
    performSegue(withIdentifier: "toAdditionalInfo", sender: self) 
     let row = indexPath.row 
     print("working so far ") 

    let indexPath = tableView.indexPathForSelectedRow! 
    let currentCell = tableView.cellForRow(at: indexPath)! as UITableViewCell 
    makeToPass = currentCell.Model 
    modelToPass = currentCell.Make  
} 
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "toMapView" { 
     var viewController = segue.destination as! 
AdditionalInfoViewController 
     viewController.makeToPass = makeToPass 
     viewController.modelToPass = modelToPass    

    } 
} 

Struktur für Variablen in mein AdditionalInfoView-Controller

var passedValue: String? 
    var latitudePassedValue: String? 
    var longitudePassedValue: String? 
+0

Sind 'makeToPass' und' modelToPass' optionals? Wie werden sie in der nächsten VC initialisiert? Wenn Sie in 'prepare (for segue:) 'print-Anweisungen hinzufügen, welche Werte haben' makeValueToPass' und 'modelValueToPass'? In Ihrer Funktion tableView (didSelectRowAt) weisen Sie 'makeToPass = currentCell.Model modelToPass = currentCell.Make' zu, aber dann verwenden Sie verschiedene Variablennamen im Segment. Meinst du "makeToPass" statt "makeValueToPass"? –

+0

Ich habe gerade den "makeValueToPass" korrigiert und bin zu dem "makeToPass" gewechselt, den ich in meiner tableView (didSelectRowAt) -Funktion zugewiesen habe. Ich habe gerade die Struktur für meine Variablen in die Frage eingefügt. – Alex

Antwort

0

Das Problem scheint in der Analyse der Daten aus der Datenbank zu sein. Die Struktur hat make und model alle Kleinbuchstaben:

// ... 
make:"toyota", 
model:"corolla", 
// ... 

Aber in der Parsing-Methode werden Sie es mit dem ersten Buchstaben in Groß Adressierung:

// ... 
Make = snapshotValue["Make"] as? String // "Make" 
Model = snapshotValue["Model"] as? String // "Model" 
// ... 
Verwandte Themen