Firebase + Swift TableView 按日期排序

Posted

技术标签:

【中文标题】Firebase + Swift TableView 按日期排序【英文标题】:Firebase + Swift TableView Sorted by Dates 【发布时间】:2016-09-25 09:20:45 【问题描述】:

我对编码领域还很陌生,我知道这个问题在其他地方可能已经得到了类似的回答,但对于 Firebase 可能不会。我一直在关注这个答案 (Adding sections, separated by dates, to UITableView in Swift),但在实现 .ChildAdded 和 insertRowAtIndexPath 时遇到了复杂情况。我的代码如下:

var ref: FIRDatabaseReference!
var mileageDatabase: [FIRDataSnapshot]! = []
var retrieveDates: [(String)] = []
var uniqueDates: [(String)] = []

struct tripDataset 
    let date: String
    let purpose: String

var tripItems = Dictionary<String, Array<tripDataset>>()

override func viewDidLoad() 
    super.viewDidLoad()
    self.tableView = UITableView(frame: self.tableView.frame, style: .Grouped)

    let nib = UINib(nibName: "TripTableViewCell", bundle: nil)
    self.tableView.registerNib(nib, forCellReuseIdentifier: "cell")
    configureDatabase()



func configureDatabase() 
    self.ref = FIRDatabase.database().reference()
    if let user = FIRAuth.auth()?.currentUser 
        self.ref.child("mileage").queryOrderedByChild("user").queryEqualToValue(user.uid).observeEventType(.ChildAdded, withBlock:  (snapshot) in
            self.mileageDatabase.insert(snapshot, atIndex: 0)

            let snapValues = snapshot.value as! Dictionary< String, AnyObject>
            let snapDates = snapValues["date"] as! String
            let snapPurpose = snapValues["purpose"] as! String

            self.retrieveDates.append(snapValues["date"] as! String)
            self.uniqueDates = Array(Set(self.retrieveDates))

            if self.tripItems.indexForKey(snapDates) == nil 
                self.tripItems[snapDates] = [tripDataset(date: snapDates, purpose: snapPurpose)]
             else 
                self.tripItems[snapDates]!.append(tripDataset(date: snapDates, purpose: snapPurpose))
            

            self.tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: 0, inSection: 0)], withRowAnimation: .Automatic) //Stuck hereeee.....

        )
            


override func numberOfSectionsInTableView(tableView: UITableView) -> Int 
    return self.uniqueDates.count 


override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return self.tripItems[section].count


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! TripTableViewCell

    cell.dateTimeLabel.text = self.uniqueDates(indexPath.section)
    cell.purposeLabel.text = self.tripItem[self.uniqueDates(indexPath.section)]["purpose"]

    return cell


override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? 
return self.uniqueDates(section)

我知道这里有很多错误,有没有人可以相应地指导我? Firebase 的所有异步特性让我的流程变得复杂。

【问题讨论】:

有什么问题,你想做什么..? @Dravidian 按日期对表格视图进行排序,其中每一天本身就是一个部分。我们的想法是将一天内的所有旅行归为一个部分。 【参考方案1】:

试试这个。 从以下代码更改

self.retrieveDates.append(snapValues["date"] as! String)

self.retrieveDates.insert( snapValues, at : 0)

【讨论】:

以上是关于Firebase + Swift TableView 按日期排序的主要内容,如果未能解决你的问题,请参考以下文章

Swift:如何使用编辑按钮删除并停用滑动删除?

Firebase/Swift - 从 Firebase 输出数据出错

Firebase.google.com iOS 中的 Firebase 动态链接(Swift)

Firebase 与 Swift

无法将 Firebase 导入 Swift 类

新的 Firebase 数据导致 TableView 单元格闪烁 (Firebase/iOS/Swift)