Je rencontre des problèmes lors de l'affichage de la marque et du modèle de la cellule sélectionnée dans un autre contrôleur de vue connecté par un segment. Les cellules affichent le numéro de Vin et je veux que les informations sur la marque et le modèle pour ce numéro vin spécifique soient transmises à un autre ViewController. J'ai essayé de mettre en place les valeurs, mais je n'arrive pas à le faire fonctionner. Est-ce que quelqu'un peut jeter un coup d'oeil et voir si ils peuvent repérer où je me suis trompé?Passage des données Firebase de tableview à ViewController
Voici ce que ma base de données firebase ressemble:
Vehicles: {
5UXKR0C34H0X82785: {
VehicleInfo: {
make:"toyota",
model:"corolla",
VinNumber: "5UXKR0C34H0X82785"
}
}
}
Voici mon modèle de véhicule classe
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
}
}
Voici mon point de vue code du contrôleur
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
}
}
Structure
pour les variables mon contrôleur AdditionalInfoView
var passedValue: String?
var latitudePassedValue: String?
var longitudePassedValue: String?
Are '' makeToPass' et optionals modelToPass'? Comment sont-ils initialisés dans le prochain VC? Si vous ajoutez des instructions d'impression dans 'prepare (pour segue:)', quelles sont les valeurs de 'makeValueToPass' et de' modelValueToPass'? Dans votre fonction tableView (didSelectRowAt) ', vous affectez' makeToPass = currentCell.Model modelToPass = currentCell.Make 'mais vous utilisez ensuite différents noms de variables dans la section. Voulez-vous dire 'makeToPass' au lieu de' makeValueToPass'? –
Je viens de corriger le "makeValueToPass" et commuté à la "makeToPass" que j'ai assigné dans ma fonction tableView (didSelectRowAt). Je viens d'ajouter la structure de mes variables dans la question aussi. – Alex