在通过IOS重新加载时向firebase添加一行数据后,数据丢失

在通过IOS重新加载时向firebase添加一行数据后,数据丢失,ios,swift,Ios,Swift,在IOS中,我导航到屏幕并通过以下代码添加数据: let dbRow = FIRDatabase.database().reference().child("bikes").child(self.userUid).childByAutoId() dbRow.child("brand").setValue(self.brand.text) dbRow.child("model").setValue(self.model.text) dbRow.child("year").setValue(sel

在IOS中,我导航到屏幕并通过以下代码添加数据:

let dbRow = FIRDatabase.database().reference().child("bikes").child(self.userUid).childByAutoId()

dbRow.child("brand").setValue(self.brand.text)
dbRow.child("model").setValue(self.model.text)
dbRow.child("year").setValue(self.year.text)
dbRow.child("serialNo").setValue(self.serialNo.text)
dbRow.child("store").setValue(self.store.text)
dbRow.child("imageURL").setValue(metadata?.downloadURL()!.absoluteString)

self.navigationController!.popViewController(animated: true)
FIRDatabase.database().reference().child("bikes").child(userUid).observe(FIRDataEventType.childAdded, with: { (snapshot) in

     if snapshot.exists() {
       let bike = Bike()

        bike.bikeKey = snapshot.key
        let bikeDict = snapshot.value as! [String : AnyObject]

        bike.brand = bikeDict["brand"] as! String
        bike.ImageUrl = bikeDict["imageURL"] as! String
        bike.model = bikeDict["model"] as! String
        bike.SerialNo = bikeDict["serialNo"] as! String
        bike.Store = bikeDict["store"] as! String
        bike.year = bikeDict["year"] as! String

        self.bikes.append(bike)
        self.tableView.reloadData()

    }
    //    print(self.bikes.count)
    // method to get current user id  FIRAuth.auth()!.currentUser!.uid
})
在返回并在原始屏幕的
ViewDidLoad
功能中导航后,我有以下代码:

let dbRow = FIRDatabase.database().reference().child("bikes").child(self.userUid).childByAutoId()

dbRow.child("brand").setValue(self.brand.text)
dbRow.child("model").setValue(self.model.text)
dbRow.child("year").setValue(self.year.text)
dbRow.child("serialNo").setValue(self.serialNo.text)
dbRow.child("store").setValue(self.store.text)
dbRow.child("imageURL").setValue(metadata?.downloadURL()!.absoluteString)

self.navigationController!.popViewController(animated: true)
FIRDatabase.database().reference().child("bikes").child(userUid).observe(FIRDataEventType.childAdded, with: { (snapshot) in

     if snapshot.exists() {
       let bike = Bike()

        bike.bikeKey = snapshot.key
        let bikeDict = snapshot.value as! [String : AnyObject]

        bike.brand = bikeDict["brand"] as! String
        bike.ImageUrl = bikeDict["imageURL"] as! String
        bike.model = bikeDict["model"] as! String
        bike.SerialNo = bikeDict["serialNo"] as! String
        bike.Store = bikeDict["store"] as! String
        bike.year = bikeDict["year"] as! String

        self.bikes.append(bike)
        self.tableView.reloadData()

    }
    //    print(self.bikes.count)
    // method to get current user id  FIRAuth.auth()!.currentUser!.uid
})

获取品牌是可行的,但是访问imageURL会返回一个错误
EXC\u BAD\u指令
。但是,在第一次加载屏幕时,将返回所有行。有什么想法吗?

您应该异步重新加载数据。我正在打电话,不确定此代码是否有效,但您可以尝试一下:

 DispatchQueue.main.async {
                    self.tableView.reloadData()
                }

您应该异步重新加载数据。我正在打电话,不确定此代码是否有效,但您可以尝试一下:

 DispatchQueue.main.async {
                    self.tableView.reloadData()
                }

欢迎来到堆栈溢出!您可以先学习并创建一个示例。这使我们更容易帮助你。在工作中,我们有一条规则:永远不要明确地打开包装!丢失信息比强行撞车要好。这会帮你省去麻烦…欢迎使用堆栈溢出!您可以先学习并创建一个示例。这使我们更容易帮助你。在工作中,我们有一条规则:永远不要明确地打开包装!丢失信息比强行撞车要好。它会帮你省去头痛。。。