【发布时间】:2018-04-02 23:22:38
【问题描述】:
正如标题所说,我只希望 reloadtableview() 被调用一次。我该如何处理? 这是我的代码:
var posts = [Post]() {
didSet {
posts.reverse()
self.tableView.reloadData()
}
}
func fetchData(){
currentQuery.observe(.value, with: { (snapshot) in
if let snapshot = snapshot.children.allObjects as? [DataSnapshot]{
var foundPosts = [Post]()
for snap in snapshot {
if let postDict = snap.value as? Dictionary<String, Any>{
let key = snap.key
let post = Post.init(postKey: key, postData: postDict)
foundPosts.append(post)
}
}
self.posts = foundPosts
geoQuery?.removeAllObservers()
}
})
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
fetchData()
// if I put "tableView.reloadData()" here, it wont load when the app opens for the first time
}
这样,每次数据库中的某些内容发生更改时,tableview 都会重新加载。我只想重新加载一次,但仍然有那个观察者。
【问题讨论】:
-
既然你真的要求
reloadData不是每次更新posts时都被调用,请使用didSet重新加载表格视图。 -
这不是我已经在做的吗?不太确定我是否理解您的回答。
-
糟糕。错字。我的意思是“不要不使用
didSet”。 -
好的。我试图将它移动到 viewWillAppear,但是当我打开应用程序时它不会加载(它会在调用 viewWillAppear 时重新加载)。
-
为什么不希望每次更新
posts时都重新加载表?表格视图如何显示正确的数据?