2017-09-28 13 views
0

セグによって接続された別のビューコントローラで、選択したセルの製造元とモデルを表示する際に問題が発生しています。セルにはVin番号が表示され、別のViewControllerに渡された特定のvin番号の製造元とモデル情報が必要です。私は値を渡すように設定しようとしましたが、動作させることはできません。誰かが見て、彼らが私が間違っていた場所にスポットすることができますか?ここでテーブルビューからViewControllerへのFirebaseデータの受け渡し

は私firebaseデータベースは次のようになります。ここではここ

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

が私の車のモデルクラスである

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 
    } 
} 

は中の変数のための私のビューコントローラコード

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    

    } 
} 

構造であり、私のAdditionalInfoViewコントローラ

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

は 'makeToPass'と' modelToPass'のoptionalsていますか?次のVCでどのように初期化されますか? 'prepare(for segue:)'にprintステートメントを追加すると、 'makeValueToPass'と' modelValueToPass'にはどのような値がありますか?あなたのtableView(didSelectRowAt) '関数では、' makeToPass = currentCell.Model modelToPass = currentCell.Make 'を割り当てますが、あなたはそのsegueで異なる変数名を使用します。 'makeValueToPass'ではなく' makeToPass'を意味しますか? –

+0

"makeValueToPass"を修正し、tableView(didSelectRowAt)関数で割り当てた "makeToPass"に切り替えました。私はちょうど質問に私の変数の構造を追加しました。 – Alex

答えて

0

問題は、データベースからのデータの解析にあるようです。

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

しかし、あなたは大文字の最初の文字と、それに対処している解析方法で:構造がmakemodelすべて小文字を持つ

// ... 
Make = snapshotValue["Make"] as? String // "Make" 
Model = snapshotValue["Model"] as? String // "Model" 
// ... 
関連する問題