gpt4 book ai didi

Swift 子级在嵌套或 ObserveSingleEvent 时返回 Null,在未嵌套时返回良好

转载 作者:行者123 更新时间:2023-11-30 10:51:15 26 4
gpt4 key购买 nike

我正在尝试找回一个 child 的 child 。整个 snapshotValue 返回 null。当我检索与子项相同的数据(非嵌套)时,它检索得很好。

我正在使用 XCode 10 和 Swift 4

为了进行故障排除,我有两个名为“Promoters”的节点。一个位于根部,一个嵌套在“合作伙伴”子级中(首选)。当嵌套节点工作时,我将删除顶级节点。

数据结构如下:

"Partners" : {
"Acts" : [hidden],
"Promoters" : [ null, {
"Cell" : hidden,
"Contact Name" : “hidden”,
"Email" : “hidden”,
"Facebook" : “hidden“,
"Title" : "CHORD Productions"
} ]
},
"Promoters" : {
"chord" : {
"Title" : "Chord Productions"
}
}

这将检索我正在查找的数据(用于填充选择器的标题列表):

        let promotersDB = Database.database().reference().child("Promoters")
promotersDB.observe(.childAdded) { (snapshot) in

let snapshotValue = snapshot.value as! Dictionary<String, String>
let promoterName = snapshotValue["Title"]!
let promoter = PromoterClass()
promoter.promoterName = promoterName
self.promoterArray.append(promoter)
let isSuccess = true
completion(isSuccess)
}

这返回零:

        let promotersDB = Database.database().reference().child("Partners").child("Promoters")
promotersDB.observe(.childAdded) { (snapshot) in

let snapshotValue = snapshot.value as! Dictionary<String, String>
let promoterName = snapshotValue["Title"]!
let promoter = PromoterClass()
promoter.promoterName = promoterName
self.promoterArray.append(promoter)
let isSuccess = true
completion(isSuccess)
}

我更喜欢observeSingleEvent,但这也会返回nil:

        let promotersDB = Database.database().reference().child("Promoters")
promotersDB.observeSingleEvent(of: .value, with: { (snapshot) in

let snapshotValue = snapshot.value as! Dictionary<String, String>
let promoterName = snapshotValue["Title"]!
let promoter = PromoterClass()
promoter.promoterName = promoterName
self.promoterArray.append(promoter)
let isSuccess = true
completion(isSuccess)
})

错误是:

Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

**我现在使用强制解包,以便在调查后端规则可以完成多少数据完整性后进行审查:)

任何帮助将不胜感激。

最佳答案

我认为 firebase 通常建议 Fan Out方法在处理数据树时,所以你不应该像“Promoters”那样嵌套数组。

您还需要通过 uid 而不是名称来识别每个发起人(以防您必须在系统中更改他们的名称)。

因此,如果您愿意,请尝试像这样重组数据:

let uid = Database.database().reference().child("Promoters").childByAutoId()
// uid will be some super long string of random letters and numbers, for example like: 1hjK2SCRV2fhCI0Vv3plGMct3mL2

"Promoters" : {
"1hjK2SCRV2fhCI0Vv3plGMct3mL2" : {
"Title" : "Chord Productions"
}
}

然后当您想要查询该启动子分支内的值时:

let titleRef = Database.database().reference().child("Promoters").child(uid)

titleRef.observeSingleEvent(of: .value) { (snapshot) in
if let dict = snapshot.value as? [String: AnyObject] {
let promoter = PromoterClass()
promoterName = dict["Title"] as? String
promoter.promoterName = promoterName
}
}

关于Swift 子级在嵌套或 ObserveSingleEvent 时返回 Null,在未嵌套时返回良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54464574/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com