2016-07-05 118 views
0

我目前遇到有關從firebase進行表視圖排序的一些問題。我試圖實現的是在表格視圖中列出5個不同的價格層級,所有命名(tier1,tier5,tier12,tier24,tierPermanent) - 每個層級包含一個值(價格)。Swift/Firebase排序

但是,從數據庫中獲取這些值時,我發現在表視圖中顯示這些值時非常困難 - 它們都包含文本(時間)和價格層。我現在正在做的是,我使用observeEventType來顯示所有值,然後將每個值存儲在字典中。之後,我將它追加到[[String:String]]類型的字典數組中。

我在苦苦掙扎,是在表格視圖中以降序顯示。請注意,所有這5個值都是可選的,因此它們可能不包含任何值 - 所以不是在第一行顯示值,在第二行顯示空白單元格,然後在第三行顯示新值 - 我希望它顯示與值相比的降序。 (如果永久值包含一個值,則始終位於最前面,否則tier24將位於最前面,否則將位於tier12。)。對於每個細胞。

我知道我將訪問cell.nameLabel.text = cell [indexPath.row] [「tier ..」]的唯一值爲?字符串 - 但問題是我需要進行某種排序,並確保數據不會顯示兩次。 (按鍵和值排序 - 在同一單元格中顯示鍵和值)。

關於我如何處理這個問題的任何想法?

在此先感謝。

+0

而不是描述您的代碼,發佈[最小,完整的代碼,再現您的問題](http://stackoverflow.com/help/mcve)。 –

回答

1

還有的實在沒有足夠的數據完全可以解決這個問題,但這個怎麼樣:

一個火力地堡結構:

tiers 
    -Y0998uas9j 
    tier_type: tier_24 
    time: 20160705130100 
    sort_order: 1 
    -Ykja9s9js9 
    tier_type: tier_05 
    time: 20160705130300 
    sort_order: 3 
    -Yukl9jh8sj 
    tier_type: tier_permanent 
    time: 20160705130500 
    sort_order: 0 

層有一個排序順序,讓他們以正確的順序。

tier_permanent = 0 
tier_24 = 1 
tier_12 = 2 
tier_05 = 3 
tier_01 = 4 

和一些代碼來閱讀,並保持排序,從高到低:

var myArray = [[String:String]]() 
    let tiersRef = self.myRootRef.child("tiers") 
    tiersRef.observeSingleEventOfType(.Value, withBlock: { snapshot in 

     for child in snapshot.children { 
      var dict = [String: String]() 
      dict["fbKey"] = child.key as String 
      dict["tier_type"] = child.value["tier_type"] as? String 
      dict["timestam"] = child.value["time"] as? String 
      dict["sort_order"] = child.value["sort_order"] as? String 
      myArray.append(dict) 
     } 

     myArray.sortInPlace({$0["sort_order"] < $1["sort_order"]}) 

     self.mySuperTableView.reloadData() 

     for dict in myArray { //meh, print them so show they are sorted 
      print(dict) 
     } 
    }) 

這解決:讓他們排序,降序,如果輪胎不存在於數據庫中,他們將顯然沒有被讀入。

問題是,雖然從他質疑層名和值(時間?)之間的相關性還不清楚。我會再更新一次信息。

+0

感謝您寫得很好,並解釋了答案 - 然而,我通過創建5個獨立的獨特表格視圖單元格類來解決我的問題。但是,非常感謝! – askaale