swift - 在 firebase 数据库中搜索子子项

标签 swift uitableview firebase firebase-realtime-database

Firebase 结构

enter image description here

您好,我正在尝试研究如何在我的 Firebase 数据库(附加结构)中查询 jobBrand 和 jobName 并将其存储在 tableView 中。我将在每个职位品牌下存储更多信息,因此我希望尽可能保持这种结构?

到目前为止,我可以让 tableView 读取 2 个字段(如果它们在上一级),因此结构为:

tbaShootApp -> 职位 -> 职位品牌 > 数据。

我无法向下查询另一个级别并将其存储在 tableView 中。这可能吗?

我正在使用字典来存储工作信息:

class Job: NSObject {
var id: String?
var jobBrand: String?
var jobName : String?
var director : String?
var jobInfo : jobInfo?
init(dictionary: [String: AnyObject]) {
    self.id = dictionary["id"] as? String
    self.jobBrand = dictionary["jobBrand"] as? String
    self.jobName = dictionary["jobName"] as? String
    self.director = dictionary["Director"] as? String
}

这是查询数据的代码 - 我的 superViewDidLoad 中有函数“fetchJobs”。

func fetchJobs() {

    Database.database().reference().child("Jobs").observe(.childAdded) { (snapshot) in

        if let dictionary = snapshot.value as? [String: AnyObject] {

                let job = Job(dictionary: dictionary)
                job.id = snapshot.key
                self.jobs.append(job)

                //this will crash because of background thread, use dispatch_async to fix
                DispatchQueue.main.async(execute: {
                    self.tableView.reloadData()
                })
            }
        }
    }

JSON

{
  "Jobs" : {
    "Candycrush" : {
      "cameraInfo" : {
        "cameraBody" : "A",
        "cameraBrand" : "Arri",
        "cameraType" : "Alexa"
      },
      "jobInfo" : {
        "jobBrand" : "CandyCrush",
        "jobName" : "Winter"
      }
    },
    "Honda" : {
      "cameraInfo" : {
        "cameraBody" : "A",
        "cameraBrand" : "Arri",
        "cameraType" : "Alexa XT"
      },
      "jobBrand" : "Honda",
      "jobName" : "Comet"
    },
    "WWF" : {
      "cameraInfo" : {
        "cameraBody" : "A",
        "cameraBrand" : "Red",
        "cameraType" : "Epic"
      },
      "jobInfo" : {
        "jobBrand" : "WWF",
        "jobName" : "Eye"
      }
    }
  }
}

最佳答案

还有很长的路要走,但也许这会有所帮助:

 .child("Jobs").observe(.childAdded)

它会在每次添加新工作(Candycrush、本田等)时通知您。

(注意 - 除其他外,您很可能还想观察该列表中的移除情况。)

如果您正在制作一个表格(或任何...某种列表、分页对象、选项卡集合等):

几乎可以肯定,表格的每一行自己想要观察那项工作。

因此第一行将观察 Jobs/Candycrush

中的变化

因此第二行将观察 Jobs/Honda

的变化

等等。每个表格行(或屏幕、面板、气泡、选项卡或其他任何东西)都会自己观察那个东西。

顺便说一句,几乎可以肯定那里的“第一级”标题(本田、Candycrush 等所在的位置)是一个 id 字符串。 (只需使用 UUID,或让 Firebase 执行。)然后字段“标题”将是本田等。使用实际标题作为那里的 ID 是非常不寻常的。 (请注意,除此之外,您无法更改/编辑标题!)。

关于swift - 在 firebase 数据库中搜索子子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47940703/

相关文章:

ios - 如何通过发送产品名称来查找特定的产品 ID?

ios - 在 Firebase 中创建用户后立即发送验证邮件

ios - 如何正确地圆化具有动态高度的 TableView 单元格的边缘

ios - 使用 MapKit 计算 3 个或更多地址之间的距离

ios - 如何在每个切片中制作不同数量的细胞

ios - 自定义 TableView 中的标签文本没有改变

ios - 如果没有剩余行,PrefetchRowsAt 将不起作用

swift - 当其他用户的应用程序处于非事件状态时,如何让一个用户获取另一个用户的位置? ( swift/火力基地)

swift - 奇怪的 `Fatal error: Unexpectedly found nil` 但可选 DOES 有一个值

ios - 如何在 Firebase 远程配置中使用字符串而不是 plist 设置默认值?