Swift Firebase:带有.childAdded的UIRefreshControl

时间:2017-03-05 10:45:31

标签: swift uitableview firebase

好的,请原谅我,如果这可能是一个非常基本的问题,但是如何仅使用添加到Firebase的新项目来刷新我的tableView?

我正在尝试实施一个“刷新'对于我的tableView并使用已添加到Firebase的新项目填充我的tableView。在viewDidLoad中,我调用.observeSingleEvent(.value)来显示表。

在刷新功能时,我调用.observe(.childAdded)。但这样做会使应用程序始终监听添加的内容,使我的应用程序始终重新加载数据。如何对其进行编码,使其仅在我执行“刷新”时才刷新?到目前为止我的代码:

import csv
from collections import defaultdict

joined_data = dict()
column_map = defaultdict(list)

with open("file1.txt") as f1, open("file2.txt") as f2:
    kh = next(f1).strip()
    vh = next(f2).strip()
    key_headers = kh.split(',')
    value_headers = vh.split(',')

    [column_map[k].append(v) for k in key_headers[1:] for v in value_headers[1:] if v.startswith(k)]
    joined_data['ID'] = dict(column_map)

    key_list = list(csv.DictReader(f1, fieldnames=key_headers))
    value_list = list(csv.DictReader(f2, fieldnames=value_headers))

for kl, vl in zip(key_list, value_list):
    inner = {}
    for key, value_list in column_map.items():
        if kl[key]:
            inner[kl[key]] = [vl[el] for el in value_list]

    joined_data[kl['ID']] = inner

我也尝试过observeSingleEvent(.childAdded),但它只从Firebase中抽出一个条目(最顶层的条目)。

我不确定我的方法是否正确。这里有任何建议,谢谢。

1 个答案:

答案 0 :(得分:0)

添加

var lastKey: String? = nil

在遍历子项的循环中,将lastKey设置为当前快照键。

lastKey = snap.key

请告诉我这是否适合您。

func refreshData() {
    // Make sure you write a check to make sure lastKey isn't nil
    ref.child("events").orderByKey().startAt(lastKey).observeSingleEvent(of: .value, with: { (snapshot) in
        // You'll have to get rid of the first childsince it'll be a duplicate, I'm sure you can figure that out.
        for snap in snapshot.children {
            self.eventsArray.insert(snap as! FIRDataSnapshot, at: 0)
        }
        DispatchQueue.main.async {
            self.refresh.endRefreshing()
            self.tableView.reloadData()
        }
    }) { (error) in
        print(error.localizedDescription)

    }
}