将Firebase中的大数据加载到UITableView中

时间:2017-05-31 09:11:07

标签: ios swift uitableview firebase firebase-realtime-database

我有一个比较大的数据集(大约1,000行),需要从Firebase填充到UITableView中。我也在UITableView中使用了部分和搜索功能。

这就是它具有所需功能的时刻:

Screengrab

如您所见,UITableView中使用了部分功能。但我目前面临的the issue数据是extremely slow loading。我有localPersistenceEnabled但是填充所有数据仍然需要大约3-4秒,而且体验不太愉快。

我该如何解决这个问题?我读到了分页,但我也希望保留部分的功能。对于部分,这是我正在使用的代码:

override func viewWillAppear(_ animated: Bool) {

    self.racks.removeAll()
    self.sectionals.removeAll()
    self.tableView.reloadData()

    ref.queryOrdered(byChild: "chamber").observe(.childAdded, with: { (snapshot) -> Void in

        // Manage TableView Sections & Rows for Rack Additions

        var doesSectionExist = false
        let segment = (snapshot.value as! [String : AnyObject])["segment"] as! String

        if self.sectionals.contains(segment){
            // There's already an index present for this letter.
            doesSectionExist = true
            var snapshotData = self.racks[segment]
            snapshotData?.append(snapshot)
            self.racks[segment] = snapshotData
        }
        else{
            self.racks[segment] = [snapshot]
            self.sectionals.append(segment)
        }

        self.allRacks.append(snapshot)

        self.sectionals = self.sectionals.sorted()

        if !doesSectionExist{
            self.tableView.insertSections(IndexSet(integer: self.sectionals.index(of: segment)!), with: .fade)
        }
        else{
            //let rowCount = self.customers[firstChar]?.count
            self.tableView.reloadSections(IndexSet(integer: self.sectionals.index(of: segment)!), with: .fade)
            //self.tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: rowCount!-1, inSection: self.sectionals.indexOf(firstChar)!)], withRowAnimation: .Fade)
        }

    })

}


override func numberOfSections(in tableView: UITableView) -> Int {
    if searchController.isActive && searchController.searchBar.text != "" {
        return 1
    }
    else{
        return sectionals.count
    }
}


override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    if searchController.isActive && searchController.searchBar.text != "" {
        return "Top Matches"
    }
    else{
        return sectionals[section]
    }
}

override func sectionIndexTitles(for tableView: UITableView) -> [String]? {
    if searchController.isActive && searchController.searchBar.text != "" {
        return nil
    }
    else{
        return sectionals
    }
}

因此,我们的想法是提供部分索引标题以便快速访问,并缩短加载这么大数据集的加载时间。

谢谢。

0 个答案:

没有答案