簡體   English   中英

Swift 3 Firebase檢索密鑰並傳遞給視圖控制器

[英]Swift 3 Firebase retrieving key and passing to view controller

我已經花了幾個小時來研究相同的問題,但是我發現的答案都沒有對這個問題有所幫助。 簡單的應用程序從Firebase數據庫檢索數據,然后從tableview傳遞到另一個視圖控制器。 主數據將通過,但是如果沒有標識的“鍵”(我嘗試將其設置為childByAutoID()但隨后更改為timestamp childByAutoID()我將無法編輯信息。 不管采用哪種方法,我得到的只是條目信息,而不是實際的密鑰本身。

func loadData() {
    self.itemList.removeAll()
    let ref = FIRDatabase.database().reference()


    ref.child(userID!).child("MyStuff").observeSingleEvent(of: .value, with: { (snapshot) in



        if let todoDict = snapshot.value as? [String:AnyObject] {
            for (_,todoElement) in todoDict {



                let todo = TheItems()



                todo.itemName = todoElement["itemName"] as? String
                todo.itemExpires = todoElement["itemExpires"] as? String
                todo.itemType = todoElement["itemType"] as? String



                self.itemList.append(todo)

                print (snapshot.key);

            }



        }

        self.tableView.reloadData()

    }) { (error) in
        print(error.localizedDescription)
    }


}

您要查找的鍵位於for循環的迭代器中

在if-let內部,嘗試執行以下操作:

for (key,todoElement) in todoDict {
    print(key) // this is your childByAutoId key 
}

這應該可以解決問題。 否則請向我們顯示您的數據庫結構的屏幕

如果您的數據如下所示:

Uid: {
    MyStuff: {
        AutoID: {
            itemName: “Apocalypse”,
            itemExpires: “December 21, 2012”,
            itemType: “Catastrophic”
        }
    }
}

然后我會這樣查詢:

ref.child(userID!).child("MyStuff").observeSingleEvent(of: .value, with: { (snapshot) in
    for child in snapshot.children {    
        let child = child as? DataSnapshot
        let key = child?.key as? String

        if let todoElement = child?.value as? [String: Any] {
            let todo = TheItems()
            todo.itemName = todoElement["itemName"] as? String
            todo.itemExpires = todoElement["itemExpires"] as? String
            todo.itemType = todoElement["itemType"] as? String

            self.itemList.append(todo)
            self.tableView.reloadData()
        }
    }
})

另外,就像我在評論中說的那樣,如果您使用的是.updateChildValues()則只需將密鑰與數據一起上傳即可。 例:

let key = ref.child("userID!").childByAutoId().key
let feed = ["key": key,
         “itemName”: itemName] as [String: Any]

let post = ["\(key)" : feed]

ref.child("userID").child("MyStuff").updateChildValues(post) // might want a completionBlock

然后,您可以按照獲取其余值的相同方式獲取密鑰。 因此,您的新數據將如下所示:

Uid: {
    MyStuff: {
        AutoID: {
            itemName: “Apocalypse”,
            itemExpires: “December 21, 2012”,
            itemType: “Catastrophic”,
            key: “autoID”
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM