我正在为我的应用程序创建一个搜索页面,允许用户相互搜索。我遇到的问题是我只能搜索我当前登录的用户。 (请注意,我还另外创建了8个假用户)
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var searchBar: UISearchBar!
//let uid = Auth.auth().currentUser?.uid
var ref = Database.database().reference().child("users").child("\(Auth.auth().currentUser!.uid)")
var filteredData = [UserModel]()
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
searchBar.delegate = self
//filteredData = data
ref.queryOrderedByValue().observeSingleEvent(of: .value) { (snapshot) in
if let userDict = snapshot.value as? [String : AnyObject] {
let userSearch = userDict["username"] as? String
self.filteredData.append(UserModel(NameDisplay: userSearch))
self.tableView.reloadData()
}
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "SearchCell", for: indexPath) as UITableViewCell
cell.textLabel?.text = filteredData[indexPath.row].NameDisplay
return cell
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return filteredData.count
}
}
我期望的是将每个用户都显示在Tableview中,然后我可以进行搜索。发生了什么,只有当前登录的用户正在显示
答案 0 :(得分:0)
耦合事物:
您的数据库规则是否设置为允许任何经过身份验证的用户查看用户名,或者是否设置为仅允许当前经过身份验证的用户查看其用户名?
您的ref
一直深入到当前经过身份验证的用户。因此,您的快照将仅获取当前用户的用户名,因为您的引用太深了。这可能是问题所在,但是一旦进行了更改,您的数据库规则可能仍需要调整。
答案 1 :(得分:0)
您的
var ref = Database.database().reference().child("users").child("\(Auth.auth().currentUser!.uid)")
正在从用户集合中获取特定的子对象,如果仅获取用户对象,则可以访问整个子对象对象集合,您可以在其中搜索其他用户。