1
我有一個在Swift中開發的應用程序,它使用Firebase作爲後端。檢索嵌套鍵Firebase數據庫
MESSAGES
-KW83KXYFzNgo-ibxKQV
--dateSent: "2016-09-09 12:30:23+0000"
--smiley:"smiley1"
--userID:"0QggCGYr46fcz3ak8tcQjsyZ9sJ2"
Users
-- 0QggCGYr46fcz3ak8tcQjsyZ9sJ2
--name: "john"
--photo:"photoURL"
我想要檢索用戶的名稱和消息顯示他們,我試試這個代碼:
self.ref = FIRDatabase.database().reference()
self.ref.child("messages").observe(.childAdded, with: { snapshot in
if let snapshotValue = snapshot.childSnapshot(forPath: Constants.Messages.senderId).value {
FIRDatabase.database().reference().child("Users")
.child(snapshotValue as! String).observe(.value, with: {userSnapshot in
if let userSnapshotValue = userSnapshot.value as? [String:Any] {
self.usernames.append(userSnapshotValue[Constants.UserFields.nickName] as! String)
}
})
結果是這樣的:
0QggCGYr46fcz3ak8tcQjsyZ9sJ2
[]
VAMFsmkM7DObJ0x752eVT1WuICe2
[]
0QggCGYr46fcz3ak8tcQjsyZ9sJ2
[]
VAMFsmkM7DObJ0x752eVT1WuICe2
[]
0QggCGYr46fcz3ak8tcQjsyZ9sJ2
[]
VAMFsmkM7DObJ0x752eVT1WuICe2
[]
所以代碼檢索鍵,但沒有執行嵌套查詢。任何命題?
問題是嵌套查詢異步,所以結果會如預期的那樣不同,我嘗試做出單獨的查詢,當用戶查詢時執行我創建tableview的單元格,但我仍然有問題,具體給出的結果,特別是當我快速上下滾動 –
@TawfikBouabid這是不正確的。 Firebase的異步特性可以使代碼在閉包運行時執行*比閉包中的代碼更慢。如果您看到答案,則打印語句僅出現在閉包內,因此變量必須包含數據,因此時間安排很好。您的問題處於更高層次,因爲您在創建單元格時不應訪問Firebase。您應該訪問Firebase以填充*數組*,然後將其作爲您的tableView的數據源。單元應該*只訪問該數組,這使得它非常靈敏。 – Jay