如何过滤获取的数据并加载到 tableview 中?
Posted
技术标签:
【中文标题】如何过滤获取的数据并加载到 tableview 中?【英文标题】:How can I filter my fetched data and load into tableview? 【发布时间】:2019-05-03 14:13:29 【问题描述】:我正在使用 Firebase 数据库。我获取了数据,并希望仅过滤和显示与用户选择匹配的信息。
我使用了条件语句来查找匹配的值并附加列表,但是,我无法加载表。当我打印变量时,它打印 0。需要帮助,谢谢。
override func viewDidLoad()
super.viewDidLoad()
projectlbl.text = "Brand: \((repair?.brand)!) Model: \((repair?.modelNumber)!)"
refResources = Database.database().reference().child("resources");
let selectedProject = "\((repair?.modelNumber)!)"
//observing the data changes
refResources!.observe(DataEventType.value, with: (snapshot) in
//if the reference have some values
if snapshot.childrenCount > 0
//clearing the list
self.resourceList.removeAll()
//iterating through all the values
for resources in snapshot.children.allObjects as! [DataSnapshot]
//getting values
let resourceObject = resources.value as? [String: AnyObject]
let id = resourceObject?["id"]
let RSSSubCat = resourceObject?["RSSSubCat"]
let RSSBrand = resourceObject?["RSSBrand"]
let RSSModelNumber = resourceObject?["RSSModelNumber"]
let RSSTitle = resourceObject?["RSSTitle"]
let RSSUrl = resourceObject?["RSSUrl"]
//creating resource object with model and fetched values
let resource = resourceModel(id: id as! String?, RSSSubCat: RSSSubCat as! String?, RSSBrand: RSSBrand as! String?, RSSModelNumber: RSSModelNumber as! String?, RSSTitle: RSSTitle as! String?, RSSUrl: RSSUrl as! String?)
//appending it to list
print(snapshot.childrenCount)
if selectedProject == resource.RSSModelNumber
print(selectedProject)
self.resourceList.append(resource)
self.diagResTable.reloadData()
else
return
//reloading the tableview
self.diagResTable.reloadData()
)
【问题讨论】:
您的错误是如果resources
的第一项与条件不匹配,它将以return
退出函数。而不是获取所有对象并过滤它们,而是使用谓词仅获取与谓词匹配的对象。
let selectedModelNumber = (self.refResources?.child("RSSModelNumber").queryEqual(toValue: selectedProject)) 我正在尝试实现这个谓词,但我不确定如何实现。我一直在梳理 firebase 文档,但我仍然感到困惑。
我不熟悉 Firebase,但每个严肃的数据库都提供通过谓词过滤的获取数据。
我知道了,谢谢您的意见!
【参考方案1】:
需要更改监听器...简单但被忽视。
let selectedModelNumber = (self.refResources?.queryOrdered(byChild: "RSSModelNumber").queryEqual(toValue: selectedProject))
//observing the data changes
selectedModelNumber!.observe(DataEventType.value, with: (snapshot) in
【讨论】:
以上是关于如何过滤获取的数据并加载到 tableview 中?的主要内容,如果未能解决你的问题,请参考以下文章
如何获取嵌套 JSON 值并将其加载到 Tableview Objective c 中?
如何将 tableview 行保存到文件并重新加载到 tableview