【发布时间】:2019-07-23 05:18:16
【问题描述】:
我正在成功检索 Firebase 数据并将其加载到我的 tableview 中。在初始加载时,我根据日期查询数据,因此它只加载日期在当前日期之后的数据。我还有一个“过去”按钮,它以相同的方式查询数据,但只显示日期早于当前日期的数据。它可以工作,但是我在每次单击按钮时都会检索数据,并且它似乎会降低性能并且有时会崩溃。这是这样做的方法吗?或者我可以通过什么方式加载所有数据和带有按钮的查询/过滤器?
override func viewDidLoad() {
super.viewDidLoad()
//Retrieving data from Firebase
refReleases = Database.database().reference().child("releases");
_ = refReleases.queryOrdered(byChild: "date").queryStarting(atValue: currentDate).observe(.value, with: { (snapshot) in
if snapshot.childrenCount>0{
self.releasesData.removeAll()
for releases in snapshot.children.allObjects as![DataSnapshot]{
let releaseObject = releases.value as? [String: AnyObject]
let releaseName = releaseObject?["releaseName"]
let releaseType = releaseObject?["releaseType"]
let releasePrice = releaseObject?["releasePrice"]
let releaseDate = releaseObject?["releaseDate"]
let releaseImage = releaseObject?["releaseImage"]
let releasetag = releaseObject?["releasetag"]
let releaseStyleCode = releaseObject?["releaseStyleCode"]
let release = ReleaseModel(releasetype: releaseType as! String?, releasename: releaseName as! String?, releaseprice: releasePrice as! String?, releasedate: releaseDate as! String?, releaseimage: releaseImage as! String?, releasetag: releasetag as! String?, releasestylecode: releaseStyleCode as! String?)
self.releasesData.insert(release, at: 0)
}
self.releasesData.reverse()
self.tableView.reloadData()
}
}
)}
}
//"Past" button
@IBAction func past(_ sender: UIButton) {
refReleases = Database.database().reference().child("releases");
_ = refReleases.queryOrdered(byChild: "date").queryEnding(atValue: currentDate).observe(.value, with: { (snapshot) in
if snapshot.childrenCount>0{
self.releasesData.removeAll()
for releases in snapshot.children.allObjects as![DataSnapshot]{
let releaseObject = releases.value as? [String: AnyObject]
let releaseName = releaseObject?["releaseName"]
let releaseType = releaseObject?["releaseType"]
let releasePrice = releaseObject?["releasePrice"]
let releaseDate = releaseObject?["releaseDate"]
let releaseImage = releaseObject?["releaseImage"]
let releasetag = releaseObject?["releasetag"]
let releaseStyleCode = releaseObject?["releaseStyleCode"]
let release = ReleaseModel(releasetype: releaseType as! String?, releasename: releaseName as! String?, releaseprice: releasePrice as! String?, releasedate: releaseDate as! String?, releaseimage: releaseImage as! String?, releasetag: releasetag as! String?, releasestylecode: releaseStyleCode as! String?)
self.releasesData.insert(release, at: 0)
}
self.tableView.reloadData()
}
}
)}
【问题讨论】:
-
正确的方法是一次获取数据并在本地过滤。
-
@TheTiger 如何在本地过滤?
-
你能分享你的崩溃信息吗?
标签: swift xcode firebase firebase-realtime-database