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?
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"? –
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