【发布时间】:2021-03-04 11:47:59
【问题描述】:
我正在尝试创建两个带有在两个之间切换的分段按钮的表。我目前有代码来切换两个表的可见性。我正在使用 firebase,并希望能够通过我放入他们的 json 树中的特定“标签”来区分用户。
例子:
Users:
|
4774893HUjd8
|
Name: John Doe
Email: example@example.com
Tag: Macro
|
38849HHIJDO877
|
Name: Jane Doe
Email: example2@example.com
Tag: Micro
我希望能够将它们保留在用户节点中。我不想创建宏和微用户节点,因为如果用户升级他们的帐户,我可以更新 firebase 中的标签。
这是我目前在项目中加载数据的方式:
func updateDataArray() {
Database.database().reference().child("Users").observe(.childAdded, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
let user = User()
//self.setValuesForKeys(dictionary)
user.Name = dictionary["Name"] as? String
user.Email = dictionary["Email"] as? String
user.ProfileImageUrl = dictionary["ProfileImageUrl"] as? String
user.UID = dictionary["UID"] as? String
user.UserCategory = dictionary["UserCategory"] as? String
self.users.append(user)
self.userName.append(user.Name!)
self.filteredNames.append(user.Name!)
print(dictionary)
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
}, withCancel: nil)
}
我使用 swift 和 firebase 作为我的后端。我真的可以使用帮助,并希望尽快解决这个问题。
编辑:这是我的用户结构,它会很有帮助。
import UIKit
class User: NSObject {
var Name: String?
var Email: String?
var ProfileImageUrl: String?
var UID: String?
var Tag: String?
}
我还添加了您建议的两个不同的数组。
我将表格计数和输入更改为各自的标签数组。
我很难更新子值并附加正确的数组。
func createDataArray() {
Database.database().reference().child("Users").observe(.childAdded, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
let user = User()
//self.setValuesForKeys(dictionary)
user.Name = dictionary["Name"] as? String
user.Email = dictionary["Email"] as? String
user.UID = dictionary["UID"] as? String
user.Tag = dictionary["Tag"] as? String
if user.Tag == "Macro" {
self.macroUsersArray.append(user)
} else if user.Tag == "Micro" {
self.microUsersArray.append(user)
}
self.users.append(user)
self.userName.append(user.Name!)
self.filteredNames.append(user.Name!)
print(dictionary)
print(self.macroUsersArray)
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
}, withCancel: nil)
}
这是我试图用来删除更新的子节点“标签”并更新我的表的数组的代码,
func updateDataArray() {
Database.database().reference().child("Users").observe(.childChanged, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
let user = User()
//self.setValuesForKeys(dictionary)
user.Name = dictionary["Name"] as? String
user.Email = dictionary["Email"] as? String
user.UID = dictionary["UID"] as? String
user.Tag = dictionary["Tag"] as? String
if user.Tag == "Macro" {
self.microUsersArray.removeAll()
} else if user.Tag == "Micro" {
self.macroUsersArray.removeAll()
}
self.users.append(user)
self.userName.append(user.Name!)
self.filteredNames.append(user.Name!)
print(dictionary)
print(self.macroUsersArray)
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
}, withCancel: nil)
}
【问题讨论】:
-
两件事;您可能应该使用用户 uid 作为用户节点中其节点的键,例如
/users/uid_x。第二件事是,你在问什么,什么不起作用?问题提到创建一个列表,但在代码中没有任何迹象 - 一个列表......什么?其他用户?最喜欢的食物?哦,这个user.Name!很危险,因为它是可选的as? String。而且你不需要在 firebase 闭包中使用这个DispatchQueue.main.async,因为 UI 调用会在主线程上自动调用。 -
嘿,杰。感谢您的评论。我希望能够将用户加载到 2 个不同的组中以显示在 2 个不同的表中。我想将它们全部加载到那里,然后通过每个用户节点下的标签来区分它们。在我的示例中,标签是宏和微。我想访问所有其他信息以及标签,因此标签不能位于所有其他信息之前。我还希望能够将标签从宏更新到微,反之亦然,而无需重新输入信息。这样我就可以用一点零钱把它们移到桌子上。
-
我忘了说我编的那些数字是uid。
标签: arrays swift xcode firebase uitableview