2016-07-05 120 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