【发布时间】:2020-12-06 19:04:51
【问题描述】:
我很难从我的 firebase 数据库中的一个节点中提取所有数据。
这是节点在 Firebase 中的样子:
Considerations
-MEdUNZwVrsDW3dTrE6N
Company Description:
Company Image:
Company Name:
Decision Date:
Start Date:
Users
B2Z4DlZ8RucvEQhz2NSUkquqc5P2
Compensation:
PostNumber:
StoryNumber:
在用户下会有多个人,他们的薪酬、帖子编号和故事编号具有不同的值。我让每个用户都有一个名为“用户注意事项”的节点,该节点标记每个用户所附加的注意事项的唯一 id,并将其放在他们的 UID 下,并在其旁边标记一个 1 作为值。我正在尝试访问每个特定用户的信息以及节点中的其他信息。这是我用来调用信息的代码以及我用来捕获信息的结构:
结构:
import UIKit
class ConsiderationInfo: NSObject {
var companyName: String?
var companyImage: String?
var companyDescription: String?
var decisionDate: String?
var startDate: String?
var compensation: String?
var postNumber: String?
var storyNumber: String?
}
观察信息的代码:
func updateConsiderationsArray() {
let uid = Auth.auth().currentUser?.uid
let ref = Database.database().reference().child("user-considerations").child(uid!)
ref.observe(.childAdded, with: { (snapshot) in
let considerationId = snapshot.key
let considerationReference = Database.database().reference().child("Considerations").child(considerationId)
considerationReference.observe(.value, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
let considerationInfo = ConsiderationInfo()
//self.setValuesForKeys(dictionary)
considerationInfo.companyName = dictionary["Company Name"] as? String
considerationInfo.companyImage = dictionary["Company Image"] as? String
considerationInfo.companyDescription = dictionary["Company Description"] as? String
considerationInfo.decisionDate = dictionary["Decision Date"] as? String
considerationInfo.startDate = dictionary["Start Date"] as? String
self.considerationsInfo.append(considerationInfo)
self.considerationName.append(considerationInfo.companyName!)
self.filteredConsiderations.append(considerationInfo.companyName!)
self.considerationCollectionView.reloadData()
}
}, withCancel: nil)
})
}
我正在尝试访问用户特定节点下的信息,即特定用户的薪酬职位编号和故事编号。我不知道如何访问所有这些来附加结构。
这是带有用户注意事项的节点:
【问题讨论】:
-
该代码格式不正确,难以阅读,您能否修复。另外,请坚持编码标准。类和结构名称的第一个字符大写。 vars 是小写的第一个字符。另外,为什么是 NSObject?这很快。另外,
withCancel之后的代码是怎么回事,因为它什么也没做。您不需要在 firebase 闭包中使用此DispatchQueue.main.async {,因为 UI 调用始终在主线程上完成。你为什么要在所有这些节点上留下观察者 - 在你的数据库中进行一次更改,所有内容都会重新加载到已经存在的内容之上。见.observeSingleEvent -
嘿,杰。感谢您的帮助。就像我提到的那样,我是编码新手(我从未参加过编码课程),所以我不知道某些带有大写字母和 NSObject 的协议。我试图通过读取特定的公司节点来设置考量类中的所有字符串。我进行了编辑,显示了我如何设置一个名为 user-consideration 的节点,该节点在每个用户的 uid 下标记公司的考虑 uid
-
最好包含您的结构,但如果可能的话将其作为文本包含 - 这样我们就可以将其复制并粘贴到答案中,而不是重新输入。很明显结构的那部分是什么,但感谢您将其包括在内。如果您能解决我提到的其余问题,那将有所帮助;修复您的变量,格式化问题中的代码并删除/更新多余的代码。很难阅读,我们仍然不知道问题底部的代码发生了什么。请记住,该值会在任何时候触发事件并添加到现有数据或覆盖现有数据。
-
嘿,杰。我删除了重新加载数据,它不会加载集合视图。我将 vars 设为小写,并在 withCancel 之后删除了第二个观察。我还需要做什么才能帮助我?
-
我没有说要删除重载数据。请重新阅读上述所有 cmets。编码是一门非常精确的学科,匆忙完成任务并忽略重要点只会导致长期的头痛。放慢并更正您项目中的实际代码,而不仅仅是更新问题中的代码;是的,您将属性小写,但现在您的其余代码将无法工作
considerationInfo.CompanyName。我们仍然不知道withCancel之后的代码是干什么用的。另外我们这是什么意思它会擦除其他节点信息?抹掉什么?火力基地?还有什么?
标签: ios arrays swift firebase-realtime-database struct