0

我張貼了一些信息,以火力地堡數據庫以定義的順序

let bookObject: Dictionary<String, Any> = [ 
         "uid": uid, 
        ]   
        FIRDatabase.database().reference().child("posts").child(key).setValue(bookObject) 

從火力地堡加載信息,我想中檢索中的tableView

func loadData(){ 
    if (FIRAuth.auth()?.currentUser) != nil{ 

     FIRDatabase.database().reference().child("posts").child(self.loggedInUser!.uid).observeSingleEvent(of: .value, with: { (snapshot:FIRDataSnapshot) in 

      let loggedInUserData = snapshot 
     if let postsDictionary = snapshot .value as? [String: AnyObject] { 
      for post in postsDictionary { 
       self.posts.add(post.value) 
      } 
      self.TableView.reloadData() 


     }})} 
} 

其中一期工程,不過,帖子中的數據隨機加載到TableView,有時一個新的帖子會被髮布到TableView的頂部,有時它會被髮布到TableView的底部。我該怎麼做才能讓新帖子顯示在前一個單元格的頂部。

回答

0

您需要爲每個帖子添加時間戳,然後根據時間戳對帖子進行排序。您沒有發佈如何構建TableView,但我建議使用由多個帖子組成的tableArray,這些帖子是自定義類Post,該帖子具有Firebase中帖子的所有屬性。然後,您可以通過執行tableArray.sort({$0.date > $1.date})來安排帖子,其中日期是Post中包含創建時間戳的字符串的變量之一。您可能想要在重新加載TableView的數據之前對tableArray進行排序。

可以再用

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = //dequeueResuableCell 

    //retrieve data from the cell's corresponding post 
    let postCreator = tableArray[indexPath.row].creatorUID 
    let postContent = tableArray[indexPath.row].content 
    ... 

    //populate the cell using the above data 
    ... 
} 

填充您的TableView,並因爲在tableArray自己的帖子按時間順序,在你TableView的職位也將在時間順序排列。

0

查看Firebase文檔頁面上的「排序數據」部分。 https://firebase.google.com/docs/database/ios/lists-of-data

它基本上允許您按您選擇的孩子來排序查詢的結果。在您的情況下,您應該根據您在Firebase實時數據庫中存儲的內容按'日期'或'時間戳'進行排序。

例子:

// My top posts by number of stars 
let myTopPostsQuery = (ref.child("user-posts").child(getUid())).queryOrdered(byChild: "starCount") 

如果當你訂購的孩子你仍然可以看到在你的tableView底部來臨的新條目,你可以簡單地扭轉你的陣列,以確保最新的會在上面。

yourArray.reversed() 

希望這會有所幫助。